@webiny/app-scheduler 6.4.11 → 6.4.12-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Gateways/SchedulerGetGraphQLGateway.js +2 -4
- package/Gateways/SchedulerGetGraphQLGateway.js.map +1 -1
- package/Presentation/Scheduler/Scheduler.d.ts +2 -2
- package/Presentation/components/ScheduleDialog/useScheduleDialog.js +1 -1
- package/Presentation/components/ScheduleDialog/useScheduleDialog.js.map +1 -1
- package/Presentation/hooks/useCancelSchedulerItem.js.map +1 -1
- package/package.json +16 -16
|
@@ -42,14 +42,12 @@ class SchedulerGetGraphQLGateway {
|
|
|
42
42
|
errors
|
|
43
43
|
});
|
|
44
44
|
throw new Error("Network error while getting scheduled action.");
|
|
45
|
-
}
|
|
46
|
-
if (result.error) {
|
|
45
|
+
} else if (result.error) {
|
|
47
46
|
console.error({
|
|
48
47
|
error: result.error
|
|
49
48
|
});
|
|
50
49
|
throw new Error(result.error.message || "Could not fetch scheduled action.");
|
|
51
|
-
}
|
|
52
|
-
if (!result.data) return null;
|
|
50
|
+
} else if (!result.data) return null;
|
|
53
51
|
const validated = await schema.safeParseAsync(result);
|
|
54
52
|
if (!validated.success) {
|
|
55
53
|
const err = createZodError(validated.error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Gateways/SchedulerGetGraphQLGateway.js","sources":["../../src/Gateways/SchedulerGetGraphQLGateway.ts"],"sourcesContent":["import type { ApolloClient } from \"apollo-client\";\nimport gql from \"graphql-tag\";\nimport zod from \"zod\";\nimport { createZodError } from \"@webiny/utils/createZodError.js\";\nimport { schedulerEntrySchema } from \"./schema/schedulerEntry.js\";\nimport { createSchedulerEntryFields } from \"./graphql/fields.js\";\nimport type {\n IGetScheduledActionGateway,\n IGetScheduledActionGatewayExecuteParams\n} from \"./abstractions/GetScheduledActionGateway.js\";\nimport type { SchedulerEntry, SchedulerErrorResponse } from \"~/types.js\";\n\nexport const createGetScheduledActionQuery = () => {\n return gql`\n query GetTargetScheduledActionQuery($namespace: String!, $id: ID!) {\n scheduler {\n getTargetScheduledAction(namespace: $namespace, id: $id) {\n data {\n ${createSchedulerEntryFields()}\n }\n error {\n message\n code\n data\n stack\n }\n }\n }\n }\n `;\n};\n\ninterface SchedulerGetGraphQLQueryResponse {\n scheduler: {\n getTargetScheduledAction: {\n data: SchedulerEntry | null;\n error: SchedulerErrorResponse | null;\n };\n };\n}\n\nconst schema = zod.object({\n data: schedulerEntrySchema\n});\n\nexport class SchedulerGetGraphQLGateway implements IGetScheduledActionGateway {\n private readonly client: ApolloClient<any>;\n\n public constructor(client: ApolloClient<any>) {\n this.client = client;\n }\n\n public async execute(params: IGetScheduledActionGatewayExecuteParams) {\n const { data: response, errors } = await this.client.query<\n SchedulerGetGraphQLQueryResponse,\n IGetScheduledActionGatewayExecuteParams\n >({\n query: createGetScheduledActionQuery(),\n variables: {\n namespace: params.namespace,\n id: params.id\n },\n fetchPolicy: \"network-only\"\n });\n\n const result = response?.scheduler?.getTargetScheduledAction;\n if (!result || errors?.length) {\n console.error({\n errors\n });\n throw new Error(\"Network error while getting scheduled action.\");\n } else if (result.error) {\n console.error({\n error: result.error\n });\n throw new Error(result.error.message || \"Could not fetch scheduled action.\");\n } else if (!result.data) {\n return null;\n }\n\n const validated = await schema.safeParseAsync(result);\n if (!validated.success) {\n const err = createZodError(validated.error);\n console.error(err);\n console.log(\n JSON.stringify({\n err,\n ex: validated.error\n })\n );\n throw err;\n }\n\n return validated.data.data;\n }\n}\n"],"names":["createGetScheduledActionQuery","gql","createSchedulerEntryFields","schema","zod","schedulerEntrySchema","SchedulerGetGraphQLGateway","client","params","response","errors","result","console","Error","validated","err","createZodError","JSON"],"mappings":";;;;;AAYO,MAAMA,gCAAgC,IAClCC,WAAG,CAAC;;;;;wBAKS,EAAEC,6BAA6B;;;;;;;;;;;IAWnD,CAAC;AAYL,MAAMC,SAASC,IAAI,MAAM,CAAC;IACtB,MAAMC;AACV;AAEO,MAAMC;IAGT,YAAmBC,MAAyB,CAAE;QAC1C,IAAI,CAAC,MAAM,GAAGA;IAClB;IAEA,MAAa,QAAQC,MAA+C,EAAE;QAClE,MAAM,EAAE,MAAMC,QAAQ,EAAEC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAGxD;YACE,OAAOV;YACP,WAAW;gBACP,WAAWQ,OAAO,SAAS;gBAC3B,IAAIA,OAAO,EAAE;YACjB;YACA,aAAa;QACjB;QAEA,MAAMG,SAASF,UAAU,WAAW;QACpC,IAAI,CAACE,UAAUD,QAAQ,QAAQ;YAC3BE,QAAQ,KAAK,CAAC;gBACVF;YACJ;YACA,MAAM,IAAIG,MAAM;QACpB
|
|
1
|
+
{"version":3,"file":"Gateways/SchedulerGetGraphQLGateway.js","sources":["../../src/Gateways/SchedulerGetGraphQLGateway.ts"],"sourcesContent":["import type { ApolloClient } from \"apollo-client\";\nimport gql from \"graphql-tag\";\nimport zod from \"zod\";\nimport { createZodError } from \"@webiny/utils/createZodError.js\";\nimport { schedulerEntrySchema } from \"./schema/schedulerEntry.js\";\nimport { createSchedulerEntryFields } from \"./graphql/fields.js\";\nimport type {\n IGetScheduledActionGateway,\n IGetScheduledActionGatewayExecuteParams\n} from \"./abstractions/GetScheduledActionGateway.js\";\nimport type { SchedulerEntry, SchedulerErrorResponse } from \"~/types.js\";\n\nexport const createGetScheduledActionQuery = () => {\n return gql`\n query GetTargetScheduledActionQuery($namespace: String!, $id: ID!) {\n scheduler {\n getTargetScheduledAction(namespace: $namespace, id: $id) {\n data {\n ${createSchedulerEntryFields()}\n }\n error {\n message\n code\n data\n stack\n }\n }\n }\n }\n `;\n};\n\ninterface SchedulerGetGraphQLQueryResponse {\n scheduler: {\n getTargetScheduledAction: {\n data: SchedulerEntry | null;\n error: SchedulerErrorResponse | null;\n };\n };\n}\n\nconst schema = zod.object({\n data: schedulerEntrySchema\n});\n\nexport class SchedulerGetGraphQLGateway implements IGetScheduledActionGateway {\n private readonly client: ApolloClient<any>;\n\n public constructor(client: ApolloClient<any>) {\n this.client = client;\n }\n\n public async execute(params: IGetScheduledActionGatewayExecuteParams) {\n const { data: response, errors } = await this.client.query<\n SchedulerGetGraphQLQueryResponse,\n IGetScheduledActionGatewayExecuteParams\n >({\n query: createGetScheduledActionQuery(),\n variables: {\n namespace: params.namespace,\n id: params.id\n },\n fetchPolicy: \"network-only\"\n });\n\n const result = response?.scheduler?.getTargetScheduledAction;\n if (!result || errors?.length) {\n console.error({\n errors\n });\n throw new Error(\"Network error while getting scheduled action.\");\n } else if (result.error) {\n console.error({\n error: result.error\n });\n throw new Error(result.error.message || \"Could not fetch scheduled action.\");\n } else if (!result.data) {\n return null;\n }\n\n const validated = await schema.safeParseAsync(result);\n if (!validated.success) {\n const err = createZodError(validated.error);\n console.error(err);\n console.log(\n JSON.stringify({\n err,\n ex: validated.error\n })\n );\n throw err;\n }\n\n return validated.data.data;\n }\n}\n"],"names":["createGetScheduledActionQuery","gql","createSchedulerEntryFields","schema","zod","schedulerEntrySchema","SchedulerGetGraphQLGateway","client","params","response","errors","result","console","Error","validated","err","createZodError","JSON"],"mappings":";;;;;AAYO,MAAMA,gCAAgC,IAClCC,WAAG,CAAC;;;;;wBAKS,EAAEC,6BAA6B;;;;;;;;;;;IAWnD,CAAC;AAYL,MAAMC,SAASC,IAAI,MAAM,CAAC;IACtB,MAAMC;AACV;AAEO,MAAMC;IAGT,YAAmBC,MAAyB,CAAE;QAC1C,IAAI,CAAC,MAAM,GAAGA;IAClB;IAEA,MAAa,QAAQC,MAA+C,EAAE;QAClE,MAAM,EAAE,MAAMC,QAAQ,EAAEC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAGxD;YACE,OAAOV;YACP,WAAW;gBACP,WAAWQ,OAAO,SAAS;gBAC3B,IAAIA,OAAO,EAAE;YACjB;YACA,aAAa;QACjB;QAEA,MAAMG,SAASF,UAAU,WAAW;QACpC,IAAI,CAACE,UAAUD,QAAQ,QAAQ;YAC3BE,QAAQ,KAAK,CAAC;gBACVF;YACJ;YACA,MAAM,IAAIG,MAAM;QACpB,OAAO,IAAIF,OAAO,KAAK,EAAE;YACrBC,QAAQ,KAAK,CAAC;gBACV,OAAOD,OAAO,KAAK;YACvB;YACA,MAAM,IAAIE,MAAMF,OAAO,KAAK,CAAC,OAAO,IAAI;QAC5C,OAAO,IAAI,CAACA,OAAO,IAAI,EACnB,OAAO;QAGX,MAAMG,YAAY,MAAMX,OAAO,cAAc,CAACQ;QAC9C,IAAI,CAACG,UAAU,OAAO,EAAE;YACpB,MAAMC,MAAMC,eAAeF,UAAU,KAAK;YAC1CF,QAAQ,KAAK,CAACG;YACdH,QAAQ,GAAG,CACPK,KAAK,SAAS,CAAC;gBACXF;gBACA,IAAID,UAAU,KAAK;YACvB;YAEJ,MAAMC;QACV;QAEA,OAAOD,UAAU,IAAI,CAAC,IAAI;IAC9B;AACJ"}
|
|
@@ -12,6 +12,6 @@ export interface SchedulerProps {
|
|
|
12
12
|
sorting: Sorting[];
|
|
13
13
|
title: string;
|
|
14
14
|
}
|
|
15
|
-
export declare const Scheduler: ((props: SchedulerProps) => React.JSX.Element) & {
|
|
16
|
-
|
|
15
|
+
export declare const Scheduler: ((props: SchedulerProps) => React.JSX.Element) & React.NamedExoticComponent<SchedulerProps> & {
|
|
16
|
+
readonly type: (props: SchedulerProps) => React.JSX.Element;
|
|
17
17
|
};
|
|
@@ -31,7 +31,7 @@ const ReschedulingAlert = ({ scheduleOn, actionType })=>{
|
|
|
31
31
|
const padLeft = (num)=>String(num).padStart(2, "0");
|
|
32
32
|
const formatDateForDateTimeLocal = (date)=>{
|
|
33
33
|
if (!date) return;
|
|
34
|
-
if ("string" == typeof date) date = new Date(date);
|
|
34
|
+
else if ("string" == typeof date) date = new Date(date);
|
|
35
35
|
const year = date.getFullYear();
|
|
36
36
|
const month = padLeft(date.getMonth() + 1);
|
|
37
37
|
const day = padLeft(date.getDate());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Presentation/components/ScheduleDialog/useScheduleDialog.js","sources":["../../../../src/Presentation/components/ScheduleDialog/useScheduleDialog.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useRef } from \"react\";\nimport { Alert, Button, Grid, Input } from \"@webiny/admin-ui\";\nimport { ReactComponent as DeleteIcon } from \"@webiny/icons/delete.svg\";\nimport { useDialogs, useSnackbar } from \"@webiny/app-admin\";\nimport { Bind, type BindComponentRenderProp } from \"@webiny/form\";\nimport { validation } from \"@webiny/validation\";\nimport { ScheduleActionType } from \"~/types.js\";\nimport type { Validator } from \"@webiny/validation/types.js\";\nimport ValidationError from \"@webiny/validation/validationError.js\";\nimport { makeDecoratable } from \"@webiny/react-composition\";\nimport ApolloClient from \"apollo-client/ApolloClient.js\";\nimport { SchedulerCancelGraphQLGateway } from \"~/Gateways/SchedulerCancelGraphQLGateway.js\";\nimport { SchedulerPublishGraphQLGateway } from \"~/Gateways/SchedulerPublishGraphQLGateway.js\";\nimport { SchedulerUnpublishGraphQLGateway } from \"~/Gateways/SchedulerUnpublishGraphQLGateway.js\";\nimport { SchedulerGetGraphQLGateway } from \"~/Gateways/SchedulerGetGraphQLGateway.js\";\nimport { ScheduleDialogPresenter } from \"./ScheduleDialogPresenter.js\";\n\nexport type ShowDialogParamsEntryStatus = \"published\" | \"unpublished\" | \"draft\" | string;\n\nexport interface IShowDialogParamsEntry {\n id: string;\n status: ShowDialogParamsEntryStatus;\n title: string;\n}\n\ninterface UseShowScheduleDialogResponse {\n showDialog: () => void;\n}\n\ninterface FormComponentProps {\n scheduleOn: Date | undefined;\n actionType: ScheduleActionType | undefined;\n}\n\nconst dateToLocaleStringFormatter = new Intl.DateTimeFormat(undefined, {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: undefined,\n hour12: false\n});\n\ninterface IReschedulingAlertProps {\n scheduleOn: Date | undefined;\n actionType: ScheduleActionType | undefined;\n}\n\nconst ReschedulingAlert = ({ scheduleOn, actionType }: IReschedulingAlertProps) => {\n if (!scheduleOn || !actionType) {\n return null;\n }\n const actionName = actionType === ScheduleActionType.publish ? \"publish\" : \"unpublish\";\n return (\n <Alert type={\"danger\"}>\n <>\n A {actionName} is already scheduled at\n <br />\n <strong>{dateToLocaleStringFormatter.format(scheduleOn)}</strong>.\n </>\n </Alert>\n );\n};\n/**\n * DO NOT use a library for this!\n */\nconst padLeft = (num: number) => {\n return String(num).padStart(2, \"0\");\n};\n\nconst formatDateForDateTimeLocal = (date?: Date | string): string | undefined => {\n if (!date) {\n return undefined;\n } else if (typeof date === \"string\") {\n date = new Date(date);\n }\n\n const year = date.getFullYear();\n const month = padLeft(date.getMonth() + 1);\n const day = padLeft(date.getDate());\n const hours = padLeft(date.getHours());\n const minutes = padLeft(date.getMinutes());\n\n return `${year}-${month}-${day}T${hours}:${minutes}`;\n};\n\nconst minDateValidator: Validator = (input: string) => {\n const value = new Date(input);\n const minDate = new Date(new Date().getTime() + 120 * 1000);\n if (minDate < value) {\n return;\n }\n throw new ValidationError(\n `The date must be at least 2 minutes in the future. Current minimum date is ${dateToLocaleStringFormatter.format(\n minDate\n )}.`\n );\n};\n\nminDateValidator.validatorName = \"minDateValidator\";\n\nexport interface ISchedulerDialogFormComponentDateTimeInputProps {\n bind: BindComponentRenderProp<Date>;\n}\n\ninterface ICancelButtonComponentProps {\n enabled: boolean;\n onCancel: OnCancelCallable;\n}\nconst CancelButtonComponent = ({ enabled, onCancel }: ICancelButtonComponentProps) => {\n if (!enabled) {\n return null;\n }\n return (\n <Button\n variant=\"ghost\"\n onClick={onCancel}\n text={\"Cancel Schedule\"}\n size=\"md\"\n icon={<DeleteIcon />}\n iconPosition=\"start\"\n />\n );\n};\n\nexport const SchedulerDialogFormComponentDateTimeInput = makeDecoratable(\n \"SchedulerDialogFormComponentDateTimeInput\",\n (props: ISchedulerDialogFormComponentDateTimeInputProps) => {\n const { bind } = props;\n\n return (\n <Input\n {...bind}\n value={formatDateForDateTimeLocal(bind.value)}\n title={\"Schedule On\"}\n label={\"Schedule On\"}\n size={\"lg\"}\n type={\"datetime-local\"}\n required\n autoFocus\n />\n );\n }\n);\n\nconst FormComponent = ({ scheduleOn, actionType }: FormComponentProps) => {\n return (\n <>\n {<ReschedulingAlert actionType={actionType} scheduleOn={scheduleOn} />}\n <Grid>\n <Grid.Column span={12}>\n <Bind\n name={\"scheduleOn\"}\n validators={[validation.create(\"required\"), minDateValidator]}\n >\n {bind => {\n return <SchedulerDialogFormComponentDateTimeInput bind={bind} />;\n }}\n </Bind>\n </Grid.Column>\n </Grid>\n </>\n );\n};\n\ninterface ScheduleFormData {\n scheduleOn?: string;\n}\n\ninterface IOnAcceptParams {\n scheduleOn: Date;\n actionType: ScheduleActionType;\n}\n\ninterface OnCancelCallable {\n (): Promise<void>;\n}\n\nexport interface IUseScheduleDialogProps {\n client: ApolloClient<object>;\n namespace: string;\n target: IShowDialogParamsEntry;\n}\n\nexport const useScheduleDialog = (\n props: IUseScheduleDialogProps\n): UseShowScheduleDialogResponse => {\n const { client, target, namespace } = props;\n const dialog = useDialogs();\n const { showSnackbar } = useSnackbar();\n\n const presenter = useMemo(() => {\n return new ScheduleDialogPresenter({\n getGateway: new SchedulerGetGraphQLGateway(client),\n cancelGateway: new SchedulerCancelGraphQLGateway(client),\n publishGateway: new SchedulerPublishGraphQLGateway(client),\n unpublishGateway: new SchedulerUnpublishGraphQLGateway(client)\n });\n }, [client]);\n\n const dialogClose = useRef<null | (() => void)>(() => {\n return;\n });\n\n const onAccept = useCallback(\n async (params: IOnAcceptParams) => {\n const { scheduleOn, actionType } = params;\n\n try {\n await presenter.schedule({\n targetId: target.id,\n namespace,\n scheduleOn,\n actionType\n });\n showSnackbar(`Scheduled ${actionType} action for \"${target.title}\"!`);\n } catch (error) {\n showSnackbar(error.message);\n console.error(error);\n }\n },\n [presenter.vm]\n );\n\n const onCancel = useCallback(async () => {\n const entry = presenter.vm.entry;\n if (!entry) {\n showSnackbar(`No scheduled action found for \"${target.title}\"!`);\n if (dialogClose.current) {\n dialogClose.current();\n dialogClose.current = null;\n }\n return;\n }\n try {\n await presenter.cancel({\n id: entry.id,\n namespace: entry.namespace\n });\n showSnackbar(`Canceled scheduled ${entry.actionType} on \"${entry.title}\"!`);\n } catch (error) {\n showSnackbar(error.message);\n }\n if (!dialogClose.current) {\n return;\n }\n dialogClose.current();\n dialogClose.current = null;\n }, [presenter.vm]);\n\n const showDialog = async () => {\n await presenter.load({ namespace, id: target.id });\n\n const isPublished = target.status === \"published\";\n const entry = presenter.vm.entry;\n const scheduleOn = entry?.publishOn || entry?.unpublishOn;\n\n dialogClose.current = dialog.showDialog({\n title: `Schedule \"${target.title}\"`,\n content: <FormComponent actionType={entry?.actionType} scheduleOn={scheduleOn} />,\n formData: {\n scheduleOn\n },\n acceptLabel: isPublished ? \"Schedule Unpublish\" : \"Schedule Publish\",\n cancelLabel: \"Discard\",\n loadingLabel: \"Scheduling...\",\n info: <CancelButtonComponent enabled={!!scheduleOn} onCancel={onCancel} />,\n onAccept: (data: Partial<ScheduleFormData>) => {\n if (!data.scheduleOn) {\n showSnackbar(`Missing \"Schedule On\" date!`);\n return;\n }\n /**\n * We need to convert scheduleOn from local string to the ISO String (UTC) format.\n * This is important because the date will be stored in the database in UTC format.\n *\n * We display the date (in the UI) in users timezone time.\n */\n let scheduleOn: Date;\n try {\n scheduleOn = new Date(data.scheduleOn);\n } catch (ex) {\n showSnackbar(`Invalid \"Schedule On\" date!`, {\n value: data.scheduleOn\n });\n console.error(ex);\n return;\n }\n\n const actionType = isPublished\n ? ScheduleActionType.unpublish\n : ScheduleActionType.publish;\n\n return onAccept({\n scheduleOn,\n actionType\n });\n }\n });\n };\n\n return {\n showDialog\n };\n};\n"],"names":["dateToLocaleStringFormatter","Intl","undefined","ReschedulingAlert","scheduleOn","actionType","actionName","ScheduleActionType","Alert","padLeft","num","String","formatDateForDateTimeLocal","date","Date","year","month","day","hours","minutes","minDateValidator","input","value","minDate","ValidationError","CancelButtonComponent","enabled","onCancel","Button","DeleteIcon","SchedulerDialogFormComponentDateTimeInput","makeDecoratable","props","bind","Input","FormComponent","Grid","Bind","validation","useScheduleDialog","client","target","namespace","dialog","useDialogs","showSnackbar","useSnackbar","presenter","useMemo","ScheduleDialogPresenter","SchedulerGetGraphQLGateway","SchedulerCancelGraphQLGateway","SchedulerPublishGraphQLGateway","SchedulerUnpublishGraphQLGateway","dialogClose","useRef","onAccept","useCallback","params","error","console","entry","showDialog","isPublished","data","ex"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Presentation/components/ScheduleDialog/useScheduleDialog.js","sources":["../../../../src/Presentation/components/ScheduleDialog/useScheduleDialog.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useRef } from \"react\";\nimport { Alert, Button, Grid, Input } from \"@webiny/admin-ui\";\nimport { ReactComponent as DeleteIcon } from \"@webiny/icons/delete.svg\";\nimport { useDialogs, useSnackbar } from \"@webiny/app-admin\";\nimport { Bind, type BindComponentRenderProp } from \"@webiny/form\";\nimport { validation } from \"@webiny/validation\";\nimport { ScheduleActionType } from \"~/types.js\";\nimport type { Validator } from \"@webiny/validation/types.js\";\nimport ValidationError from \"@webiny/validation/validationError.js\";\nimport { makeDecoratable } from \"@webiny/react-composition\";\nimport ApolloClient from \"apollo-client/ApolloClient.js\";\nimport { SchedulerCancelGraphQLGateway } from \"~/Gateways/SchedulerCancelGraphQLGateway.js\";\nimport { SchedulerPublishGraphQLGateway } from \"~/Gateways/SchedulerPublishGraphQLGateway.js\";\nimport { SchedulerUnpublishGraphQLGateway } from \"~/Gateways/SchedulerUnpublishGraphQLGateway.js\";\nimport { SchedulerGetGraphQLGateway } from \"~/Gateways/SchedulerGetGraphQLGateway.js\";\nimport { ScheduleDialogPresenter } from \"./ScheduleDialogPresenter.js\";\n\nexport type ShowDialogParamsEntryStatus = \"published\" | \"unpublished\" | \"draft\" | string;\n\nexport interface IShowDialogParamsEntry {\n id: string;\n status: ShowDialogParamsEntryStatus;\n title: string;\n}\n\ninterface UseShowScheduleDialogResponse {\n showDialog: () => void;\n}\n\ninterface FormComponentProps {\n scheduleOn: Date | undefined;\n actionType: ScheduleActionType | undefined;\n}\n\nconst dateToLocaleStringFormatter = new Intl.DateTimeFormat(undefined, {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: undefined,\n hour12: false\n});\n\ninterface IReschedulingAlertProps {\n scheduleOn: Date | undefined;\n actionType: ScheduleActionType | undefined;\n}\n\nconst ReschedulingAlert = ({ scheduleOn, actionType }: IReschedulingAlertProps) => {\n if (!scheduleOn || !actionType) {\n return null;\n }\n const actionName = actionType === ScheduleActionType.publish ? \"publish\" : \"unpublish\";\n return (\n <Alert type={\"danger\"}>\n <>\n A {actionName} is already scheduled at\n <br />\n <strong>{dateToLocaleStringFormatter.format(scheduleOn)}</strong>.\n </>\n </Alert>\n );\n};\n/**\n * DO NOT use a library for this!\n */\nconst padLeft = (num: number) => {\n return String(num).padStart(2, \"0\");\n};\n\nconst formatDateForDateTimeLocal = (date?: Date | string): string | undefined => {\n if (!date) {\n return undefined;\n } else if (typeof date === \"string\") {\n date = new Date(date);\n }\n\n const year = date.getFullYear();\n const month = padLeft(date.getMonth() + 1);\n const day = padLeft(date.getDate());\n const hours = padLeft(date.getHours());\n const minutes = padLeft(date.getMinutes());\n\n return `${year}-${month}-${day}T${hours}:${minutes}`;\n};\n\nconst minDateValidator: Validator = (input: string) => {\n const value = new Date(input);\n const minDate = new Date(new Date().getTime() + 120 * 1000);\n if (minDate < value) {\n return;\n }\n throw new ValidationError(\n `The date must be at least 2 minutes in the future. Current minimum date is ${dateToLocaleStringFormatter.format(\n minDate\n )}.`\n );\n};\n\nminDateValidator.validatorName = \"minDateValidator\";\n\nexport interface ISchedulerDialogFormComponentDateTimeInputProps {\n bind: BindComponentRenderProp<Date>;\n}\n\ninterface ICancelButtonComponentProps {\n enabled: boolean;\n onCancel: OnCancelCallable;\n}\nconst CancelButtonComponent = ({ enabled, onCancel }: ICancelButtonComponentProps) => {\n if (!enabled) {\n return null;\n }\n return (\n <Button\n variant=\"ghost\"\n onClick={onCancel}\n text={\"Cancel Schedule\"}\n size=\"md\"\n icon={<DeleteIcon />}\n iconPosition=\"start\"\n />\n );\n};\n\nexport const SchedulerDialogFormComponentDateTimeInput = makeDecoratable(\n \"SchedulerDialogFormComponentDateTimeInput\",\n (props: ISchedulerDialogFormComponentDateTimeInputProps) => {\n const { bind } = props;\n\n return (\n <Input\n {...bind}\n value={formatDateForDateTimeLocal(bind.value)}\n title={\"Schedule On\"}\n label={\"Schedule On\"}\n size={\"lg\"}\n type={\"datetime-local\"}\n required\n autoFocus\n />\n );\n }\n);\n\nconst FormComponent = ({ scheduleOn, actionType }: FormComponentProps) => {\n return (\n <>\n {<ReschedulingAlert actionType={actionType} scheduleOn={scheduleOn} />}\n <Grid>\n <Grid.Column span={12}>\n <Bind\n name={\"scheduleOn\"}\n validators={[validation.create(\"required\"), minDateValidator]}\n >\n {bind => {\n return <SchedulerDialogFormComponentDateTimeInput bind={bind} />;\n }}\n </Bind>\n </Grid.Column>\n </Grid>\n </>\n );\n};\n\ninterface ScheduleFormData {\n scheduleOn?: string;\n}\n\ninterface IOnAcceptParams {\n scheduleOn: Date;\n actionType: ScheduleActionType;\n}\n\ninterface OnCancelCallable {\n (): Promise<void>;\n}\n\nexport interface IUseScheduleDialogProps {\n client: ApolloClient<object>;\n namespace: string;\n target: IShowDialogParamsEntry;\n}\n\nexport const useScheduleDialog = (\n props: IUseScheduleDialogProps\n): UseShowScheduleDialogResponse => {\n const { client, target, namespace } = props;\n const dialog = useDialogs();\n const { showSnackbar } = useSnackbar();\n\n const presenter = useMemo(() => {\n return new ScheduleDialogPresenter({\n getGateway: new SchedulerGetGraphQLGateway(client),\n cancelGateway: new SchedulerCancelGraphQLGateway(client),\n publishGateway: new SchedulerPublishGraphQLGateway(client),\n unpublishGateway: new SchedulerUnpublishGraphQLGateway(client)\n });\n }, [client]);\n\n const dialogClose = useRef<null | (() => void)>(() => {\n return;\n });\n\n const onAccept = useCallback(\n async (params: IOnAcceptParams) => {\n const { scheduleOn, actionType } = params;\n\n try {\n await presenter.schedule({\n targetId: target.id,\n namespace,\n scheduleOn,\n actionType\n });\n showSnackbar(`Scheduled ${actionType} action for \"${target.title}\"!`);\n } catch (error) {\n showSnackbar(error.message);\n console.error(error);\n }\n },\n [presenter.vm]\n );\n\n const onCancel = useCallback(async () => {\n const entry = presenter.vm.entry;\n if (!entry) {\n showSnackbar(`No scheduled action found for \"${target.title}\"!`);\n if (dialogClose.current) {\n dialogClose.current();\n dialogClose.current = null;\n }\n return;\n }\n try {\n await presenter.cancel({\n id: entry.id,\n namespace: entry.namespace\n });\n showSnackbar(`Canceled scheduled ${entry.actionType} on \"${entry.title}\"!`);\n } catch (error) {\n showSnackbar(error.message);\n }\n if (!dialogClose.current) {\n return;\n }\n dialogClose.current();\n dialogClose.current = null;\n }, [presenter.vm]);\n\n const showDialog = async () => {\n await presenter.load({ namespace, id: target.id });\n\n const isPublished = target.status === \"published\";\n const entry = presenter.vm.entry;\n const scheduleOn = entry?.publishOn || entry?.unpublishOn;\n\n dialogClose.current = dialog.showDialog({\n title: `Schedule \"${target.title}\"`,\n content: <FormComponent actionType={entry?.actionType} scheduleOn={scheduleOn} />,\n formData: {\n scheduleOn\n },\n acceptLabel: isPublished ? \"Schedule Unpublish\" : \"Schedule Publish\",\n cancelLabel: \"Discard\",\n loadingLabel: \"Scheduling...\",\n info: <CancelButtonComponent enabled={!!scheduleOn} onCancel={onCancel} />,\n onAccept: (data: Partial<ScheduleFormData>) => {\n if (!data.scheduleOn) {\n showSnackbar(`Missing \"Schedule On\" date!`);\n return;\n }\n /**\n * We need to convert scheduleOn from local string to the ISO String (UTC) format.\n * This is important because the date will be stored in the database in UTC format.\n *\n * We display the date (in the UI) in users timezone time.\n */\n let scheduleOn: Date;\n try {\n scheduleOn = new Date(data.scheduleOn);\n } catch (ex) {\n showSnackbar(`Invalid \"Schedule On\" date!`, {\n value: data.scheduleOn\n });\n console.error(ex);\n return;\n }\n\n const actionType = isPublished\n ? ScheduleActionType.unpublish\n : ScheduleActionType.publish;\n\n return onAccept({\n scheduleOn,\n actionType\n });\n }\n });\n };\n\n return {\n showDialog\n };\n};\n"],"names":["dateToLocaleStringFormatter","Intl","undefined","ReschedulingAlert","scheduleOn","actionType","actionName","ScheduleActionType","Alert","padLeft","num","String","formatDateForDateTimeLocal","date","Date","year","month","day","hours","minutes","minDateValidator","input","value","minDate","ValidationError","CancelButtonComponent","enabled","onCancel","Button","DeleteIcon","SchedulerDialogFormComponentDateTimeInput","makeDecoratable","props","bind","Input","FormComponent","Grid","Bind","validation","useScheduleDialog","client","target","namespace","dialog","useDialogs","showSnackbar","useSnackbar","presenter","useMemo","ScheduleDialogPresenter","SchedulerGetGraphQLGateway","SchedulerCancelGraphQLGateway","SchedulerPublishGraphQLGateway","SchedulerUnpublishGraphQLGateway","dialogClose","useRef","onAccept","useCallback","params","error","console","entry","showDialog","isPublished","data","ex"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Presentation/hooks/useCancelSchedulerItem.js","sources":["../../../src/Presentation/hooks/useCancelSchedulerItem.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { useConfirmationDialog, useSnackbar } from \"@webiny/app-admin\";\nimport { useScheduler } from \"./useScheduler.js\";\nimport type { SchedulerEntry } from \"~/types.js\";\n\ninterface UseCancelScheduleItemParams {\n item: Pick<SchedulerEntry, \"id\" | \"title\" | \"actionType\">;\n}\n\nexport const useCancelSchedulerItem = ({ item }: UseCancelScheduleItemParams) => {\n const { cancelItem } = useScheduler();\n const { showSnackbar } = useSnackbar();\n\n const { showConfirmation } = useConfirmationDialog({\n title: \"Cancel scheduled action?\",\n message: (\n <p>\n You are about to cancel scheduled action for this item!\n <br />\n Are you sure you want to cancel scheduled <strong
|
|
1
|
+
{"version":3,"file":"Presentation/hooks/useCancelSchedulerItem.js","sources":["../../../src/Presentation/hooks/useCancelSchedulerItem.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { useConfirmationDialog, useSnackbar } from \"@webiny/app-admin\";\nimport { useScheduler } from \"./useScheduler.js\";\nimport type { SchedulerEntry } from \"~/types.js\";\n\ninterface UseCancelScheduleItemParams {\n item: Pick<SchedulerEntry, \"id\" | \"title\" | \"actionType\">;\n}\n\nexport const useCancelSchedulerItem = ({ item }: UseCancelScheduleItemParams) => {\n const { cancelItem } = useScheduler();\n const { showSnackbar } = useSnackbar();\n\n const { showConfirmation } = useConfirmationDialog({\n title: \"Cancel scheduled action?\",\n message: (\n <p>\n You are about to cancel scheduled action for this item!\n <br />\n Are you sure you want to cancel scheduled <strong>\n {item.actionType}\n </strong> for{\" \"}\n <strong>{item.title}</strong>?\n </p>\n )\n });\n\n const openDialogCancelSchedulerItem = useCallback(\n () =>\n showConfirmation(async () => {\n try {\n await cancelItem(item.id);\n showSnackbar(`Action on item \"${item.title}\" was canceled successfully!`);\n } catch (ex) {\n showSnackbar(ex.message || `Error while canceling action for \"${item.title}\".`);\n }\n }),\n [item]\n );\n\n return { openDialogCancelSchedulerItem };\n};\n"],"names":["useCancelSchedulerItem","item","cancelItem","useScheduler","showSnackbar","useSnackbar","showConfirmation","useConfirmationDialog","openDialogCancelSchedulerItem","useCallback","ex"],"mappings":";;;AASO,MAAMA,yBAAyB,CAAC,EAAEC,IAAI,EAA+B;IACxE,MAAM,EAAEC,UAAU,EAAE,GAAGC;IACvB,MAAM,EAAEC,YAAY,EAAE,GAAGC;IAEzB,MAAM,EAAEC,gBAAgB,EAAE,GAAGC,sBAAsB;QAC/C,OAAO;QACP,SAAS,WAAT,GACI,oBAAC,WAAE,yEAEC,oBAAC,aAAK,4DACoC,oBAAC,gBACtCN,KAAK,UAAU,GACX,QAAK,mBACd,oBAAC,gBAAQA,KAAK,KAAK,GAAU;IAGzC;IAEA,MAAMO,gCAAgCC,YAClC,IACIH,iBAAiB;YACb,IAAI;gBACA,MAAMJ,WAAWD,KAAK,EAAE;gBACxBG,aAAa,CAAC,gBAAgB,EAAEH,KAAK,KAAK,CAAC,4BAA4B,CAAC;YAC5E,EAAE,OAAOS,IAAI;gBACTN,aAAaM,GAAG,OAAO,IAAI,CAAC,kCAAkC,EAAET,KAAK,KAAK,CAAC,EAAE,CAAC;YAClF;QACJ,IACJ;QAACA;KAAK;IAGV,OAAO;QAAEO;IAA8B;AAC3C"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/app-scheduler",
|
|
3
|
-
"version": "6.4.
|
|
3
|
+
"version": "6.4.12-beta.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./index.js",
|
|
@@ -16,29 +16,29 @@
|
|
|
16
16
|
"@emotion/react": "11.14.0",
|
|
17
17
|
"@emotion/styled": "11.14.1",
|
|
18
18
|
"@material-design-icons/svg": "0.14.15",
|
|
19
|
-
"@webiny/admin-ui": "6.4.
|
|
20
|
-
"@webiny/app-aco": "6.4.
|
|
21
|
-
"@webiny/app-admin": "6.4.
|
|
22
|
-
"@webiny/app-headless-cms-common": "6.4.
|
|
23
|
-
"@webiny/app-utils": "6.4.
|
|
24
|
-
"@webiny/form": "6.4.
|
|
25
|
-
"@webiny/icons": "6.4.
|
|
26
|
-
"@webiny/react-composition": "6.4.
|
|
27
|
-
"@webiny/react-properties": "6.4.
|
|
28
|
-
"@webiny/utils": "6.4.
|
|
29
|
-
"@webiny/validation": "6.4.
|
|
19
|
+
"@webiny/admin-ui": "6.4.12-beta.1",
|
|
20
|
+
"@webiny/app-aco": "6.4.12-beta.1",
|
|
21
|
+
"@webiny/app-admin": "6.4.12-beta.1",
|
|
22
|
+
"@webiny/app-headless-cms-common": "6.4.12-beta.1",
|
|
23
|
+
"@webiny/app-utils": "6.4.12-beta.1",
|
|
24
|
+
"@webiny/form": "6.4.12-beta.1",
|
|
25
|
+
"@webiny/icons": "6.4.12-beta.1",
|
|
26
|
+
"@webiny/react-composition": "6.4.12-beta.1",
|
|
27
|
+
"@webiny/react-properties": "6.4.12-beta.1",
|
|
28
|
+
"@webiny/utils": "6.4.12-beta.1",
|
|
29
|
+
"@webiny/validation": "6.4.12-beta.1",
|
|
30
30
|
"apollo-client": "2.6.10",
|
|
31
31
|
"graphql-tag": "2.12.7",
|
|
32
32
|
"lodash": "4.18.1",
|
|
33
|
-
"mobx": "
|
|
34
|
-
"mobx-react-lite": "
|
|
33
|
+
"mobx": "7.0.3",
|
|
34
|
+
"mobx-react-lite": "5.0.3",
|
|
35
35
|
"react": "18.3.1",
|
|
36
36
|
"react-dom": "18.3.1",
|
|
37
|
-
"zod": "4.
|
|
37
|
+
"zod": "4.6.5"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@types/react": "18.3.31",
|
|
41
|
-
"@webiny/build-tools": "6.4.
|
|
41
|
+
"@webiny/build-tools": "6.4.12-beta.1",
|
|
42
42
|
"rimraf": "6.1.3",
|
|
43
43
|
"typescript": "6.0.3"
|
|
44
44
|
},
|