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

Fix a race condition when creating default timelines (#21354)

parent 27c79547
Branches
Tags
No related merge requests found
......@@ -2,7 +2,7 @@ import { t } from "ttag";
import { updateIn } from "icepick";
import _ from "underscore";
import { TimelineSchema } from "metabase/schema";
import { TimelineApi } from "metabase/services";
import { TimelineApi, TimelineEventApi } from "metabase/services";
import { createEntity, undo } from "metabase/lib/entities";
import { getDefaultTimeline } from "metabase/lib/timelines";
import TimelineEvents from "./timeline-events";
......@@ -16,32 +16,20 @@ const Timelines = createEntity({
forms,
api: {
list: async (params, ...args) => {
if (params.cardId) {
return TimelineApi.getCardTimelines(params, ...args);
} else if (params.collectionId) {
return TimelineApi.getCollectionTimelines(params, ...args);
} else {
return TimelineApi.getTimelines(params, ...args);
}
list: (params, ...args) => {
return params.collectionId
? TimelineApi.listForCollection(params, ...args)
: TimelineApi.list(params, ...args);
},
},
actions: {
createWithEvent: (event, collection) => async dispatch => {
const timelineData = getDefaultTimeline(collection);
const timelineAction = Timelines.actions.create(timelineData);
const timelineResponse = await dispatch(timelineAction);
const timeline = Timelines.HACK_getObjectFromAction(timelineResponse);
const timeline = await TimelineApi.create(getDefaultTimeline(collection));
await TimelineEventApi.create({ ...event, timeline_id: timeline.id });
const eventData = { ...event, timeline_id: timeline.id };
const eventAction = TimelineEvents.actions.create(eventData);
await dispatch(eventAction);
return {
type: "metabase/entities/timelines/CREATE_WITH_EVENT",
payload: timeline,
};
dispatch({ type: Timelines.actionTypes.INVALIDATE_LISTS_ACTION });
dispatch({ type: TimelineEvents.actionTypes.INVALIDATE_LISTS_ACTION });
},
},
......
......@@ -228,9 +228,18 @@ export const LdapApi = {
};
export const TimelineApi = {
getTimelines: GET("/api/timeline"),
getCardTimelines: GET("/api/card/:cardId/timelines"),
getCollectionTimelines: GET("/api/collection/:collectionId/timelines"),
list: GET("/api/timeline"),
listForCollection: GET("/api/collection/:collectionId/timelines"),
get: GET("/api/timeline/:id"),
create: POST("/api/timeline"),
update: PUT("/api/timeline/:id"),
};
export const TimelineEventApi = {
list: GET("/api/timeline-event"),
get: GET("/api/timeline-event/:id"),
create: POST("/api/timeline-event"),
update: PUT("/api/timeline-event/:id"),
};
export const MetabaseApi = {
......
......@@ -15,10 +15,7 @@ interface TimelinePanelProps {
}
const timelineProps = {
query: (state: State, props: TimelinePanelProps) => ({
cardId: props.cardId,
include: "events",
}),
query: { include: "events" },
};
const collectionProps = {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment