Skip to content
Snippets Groups Projects
Unverified Commit 67941276 authored by Alexander Polyankin's avatar Alexander Polyankin Committed by GitHub
Browse files

Fix moving a default timeline between collections (#22244)

parent 96a2d85a
Branches
Tags
No related merge requests found
......@@ -4,7 +4,7 @@ import _ from "underscore";
import { TimelineSchema } from "metabase/schema";
import { TimelineApi, TimelineEventApi } from "metabase/services";
import { createEntity, undo } from "metabase/lib/entities";
import { getDefaultTimeline } from "metabase/lib/timelines";
import { getDefaultTimeline, getTimelineName } from "metabase/lib/timelines";
import { canonicalCollectionId } from "metabase/collections/utils";
import TimelineEvents from "./timeline-events";
import forms from "./timelines/forms";
......@@ -35,20 +35,25 @@ const Timelines = createEntity({
},
objectActions: {
setCollection: ({ id }, collection, opts) => {
setCollection: (timeline, collection, opts) => {
return Timelines.actions.update(
{ id },
{ collection_id: canonicalCollectionId(collection && collection.id) },
{ id: timeline.id },
{
name: getTimelineName(timeline),
collection_id: canonicalCollectionId(collection && collection.id),
default: false,
},
undo(opts, t`timeline`, t`moved`),
);
},
setArchived: ({ id }, archived, opts) =>
Timelines.actions.update(
{ id },
setArchived: (timeline, archived, opts) => {
return Timelines.actions.update(
{ id: timeline.id },
{ archived, default: false },
undo(opts, t`timeline`, archived ? t`archived` : t`unarchived`),
),
);
},
},
reducer: (state = {}, action) => {
......
import { push } from "react-router-redux";
import * as Urls from "metabase/lib/urls";
import Timelines from "metabase/entities/timelines";
import { Timeline } from "metabase-types/api";
import { State } from "metabase-types/store";
export const setCollectionAndNavigate = (
timeline: Timeline,
collectionId: number | null,
) => {
return async (dispatch: any, getState: () => State) => {
const collection = { id: collectionId };
await dispatch(Timelines.actions.setCollection(timeline, collection));
const newProps = { entityId: timeline.id };
const newTimeline = Timelines.selectors.getObject(getState(), newProps);
dispatch(push(Urls.timelineInCollection(newTimeline)));
};
};
import { connect } from "react-redux";
import { goBack, push } from "react-router-redux";
import { goBack } from "react-router-redux";
import _ from "underscore";
import * as Urls from "metabase/lib/urls";
import Timelines from "metabase/entities/timelines";
......@@ -7,6 +7,7 @@ import MoveTimelineModal from "metabase/timelines/common/components/MoveTimeline
import { Timeline } from "metabase-types/api";
import { State } from "metabase-types/store";
import LoadingAndErrorWrapper from "../../components/LoadingAndErrorWrapper";
import { setCollectionAndNavigate } from "../../actions";
import { ModalParams } from "../../types";
interface MoveTimelineModalProps {
......@@ -22,9 +23,7 @@ const timelineProps = {
const mapDispatchToProps = (dispatch: any) => ({
onSubmit: async (timeline: Timeline, collectionId: number | null) => {
const collection = { id: collectionId };
await dispatch(Timelines.actions.setCollection(timeline, collection));
dispatch(push(Urls.timelineInCollection(timeline)));
dispatch(setCollectionAndNavigate(timeline, collectionId));
},
onCancel: () => {
dispatch(goBack());
......
......@@ -360,7 +360,7 @@ describe("scenarios > organization > timelines > collection", () => {
it("should move a timeline", () => {
cy.createTimelineWithEvents({
timeline: { name: "Our analytics events", default: true },
timeline: { name: "Events", default: true },
events: [{ name: "RC1" }],
});
......@@ -369,12 +369,13 @@ describe("scenarios > organization > timelines > collection", () => {
cy.findByText("Move timeline").click();
getModal().within(() => {
cy.findByText("First collection").click();
cy.findByText("My personal collection").click();
cy.button("Move").click();
cy.wait("@updateTimeline");
});
cy.findByText("First collection events").should("be.visible");
cy.findByText("Our analytics events").should("be.visible");
cy.findByText("Bobby Tables's Personal Collection").should("be.visible");
});
it("should archive a timeline and undo", () => {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment