@webiny/app-record-locking 6.4.11-beta.1 → 6.4.12-beta.0

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.
@@ -24,7 +24,7 @@ const ContentEntryGuard = (props)=>{
24
24
  }, /*#__PURE__*/ react.createElement(OverlayLoader, {
25
25
  text: "Checking record status..."
26
26
  }));
27
- if (locked) return /*#__PURE__*/ react.createElement(LockedRecord, {
27
+ else if (locked) return /*#__PURE__*/ react.createElement(LockedRecord, {
28
28
  record: locked
29
29
  });
30
30
  return children;
@@ -1 +1 @@
1
- {"version":3,"file":"components/HeadlessCmsContentEntry/ContentEntryGuard.js","sources":["../../../src/components/HeadlessCmsContentEntry/ContentEntryGuard.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { useRecordLocking } from \"~/hooks/index.js\";\nimport { LockedRecord } from \"../LockedRecord/index.js\";\nimport type { IRecordLockingLockRecord } from \"~/types.js\";\nimport type { CmsContentEntry, CmsModel } from \"@webiny/app-headless-cms/types.js\";\nimport { OverlayLoader } from \"@webiny/admin-ui\";\n\nexport interface IContentEntryGuardProps {\n loading: boolean;\n entry: CmsContentEntry;\n model: CmsModel;\n children: React.ReactElement;\n}\n\nexport const ContentEntryGuard = (props: IContentEntryGuardProps) => {\n const { loading, entry, model, children } = props;\n const { fetchLockedEntryLockRecord } = useRecordLocking();\n\n const [locked, setLocked] = useState<IRecordLockingLockRecord | null | undefined>(undefined);\n\n useEffect(() => {\n if (!entry.id || loading || locked !== undefined) {\n return;\n }\n (async () => {\n const result = await fetchLockedEntryLockRecord({\n id: entry.id,\n $lockingType: model.modelId\n });\n setLocked(result);\n })();\n }, [entry.id, loading]);\n\n if (locked === undefined) {\n return (\n <div className={\"h-screen w-screen fixed top-0 left-0 z-20\"}>\n <OverlayLoader text={\"Checking record status...\"} />\n </div>\n );\n } else if (locked) {\n return <LockedRecord record={locked} />;\n }\n\n return children;\n};\n"],"names":["ContentEntryGuard","props","loading","entry","model","children","fetchLockedEntryLockRecord","useRecordLocking","locked","setLocked","useState","undefined","useEffect","result","OverlayLoader","LockedRecord"],"mappings":";;;;AAcO,MAAMA,oBAAoB,CAACC;IAC9B,MAAM,EAAEC,OAAO,EAAEC,KAAK,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GAAGJ;IAC5C,MAAM,EAAEK,0BAA0B,EAAE,GAAGC;IAEvC,MAAM,CAACC,QAAQC,UAAU,GAAGC,SAAsDC;IAElFC,UAAU;QACN,IAAI,CAACT,MAAM,EAAE,IAAID,WAAWM,AAAWG,WAAXH,QACxB;QAEH;YACG,MAAMK,SAAS,MAAMP,2BAA2B;gBAC5C,IAAIH,MAAM,EAAE;gBACZ,cAAcC,MAAM,OAAO;YAC/B;YACAK,UAAUI;QACd;IACJ,GAAG;QAACV,MAAM,EAAE;QAAED;KAAQ;IAEtB,IAAIM,AAAWG,WAAXH,QACA,OAAO,WAAP,GACI,oBAAC;QAAI,WAAW;qBACZ,oBAACM,eAAaA;QAAC,MAAM;;IAG1B,IAAIN,QACP,OAAO,WAAP,GAAO,oBAACO,cAAYA;QAAC,QAAQP;;IAGjC,OAAOH;AACX"}
1
+ {"version":3,"file":"components/HeadlessCmsContentEntry/ContentEntryGuard.js","sources":["../../../src/components/HeadlessCmsContentEntry/ContentEntryGuard.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { useRecordLocking } from \"~/hooks/index.js\";\nimport { LockedRecord } from \"../LockedRecord/index.js\";\nimport type { IRecordLockingLockRecord } from \"~/types.js\";\nimport type { CmsContentEntry, CmsModel } from \"@webiny/app-headless-cms/types.js\";\nimport { OverlayLoader } from \"@webiny/admin-ui\";\n\nexport interface IContentEntryGuardProps {\n loading: boolean;\n entry: CmsContentEntry;\n model: CmsModel;\n children: React.ReactElement;\n}\n\nexport const ContentEntryGuard = (props: IContentEntryGuardProps) => {\n const { loading, entry, model, children } = props;\n const { fetchLockedEntryLockRecord } = useRecordLocking();\n\n const [locked, setLocked] = useState<IRecordLockingLockRecord | null | undefined>(undefined);\n\n useEffect(() => {\n if (!entry.id || loading || locked !== undefined) {\n return;\n }\n (async () => {\n const result = await fetchLockedEntryLockRecord({\n id: entry.id,\n $lockingType: model.modelId\n });\n setLocked(result);\n })();\n }, [entry.id, loading]);\n\n if (locked === undefined) {\n return (\n <div className={\"h-screen w-screen fixed top-0 left-0 z-20\"}>\n <OverlayLoader text={\"Checking record status...\"} />\n </div>\n );\n } else if (locked) {\n return <LockedRecord record={locked} />;\n }\n\n return children;\n};\n"],"names":["ContentEntryGuard","props","loading","entry","model","children","fetchLockedEntryLockRecord","useRecordLocking","locked","setLocked","useState","undefined","useEffect","result","OverlayLoader","LockedRecord"],"mappings":";;;;AAcO,MAAMA,oBAAoB,CAACC;IAC9B,MAAM,EAAEC,OAAO,EAAEC,KAAK,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GAAGJ;IAC5C,MAAM,EAAEK,0BAA0B,EAAE,GAAGC;IAEvC,MAAM,CAACC,QAAQC,UAAU,GAAGC,SAAsDC;IAElFC,UAAU;QACN,IAAI,CAACT,MAAM,EAAE,IAAID,WAAWM,AAAWG,WAAXH,QACxB;QAEH;YACG,MAAMK,SAAS,MAAMP,2BAA2B;gBAC5C,IAAIH,MAAM,EAAE;gBACZ,cAAcC,MAAM,OAAO;YAC/B;YACAK,UAAUI;QACd;IACJ,GAAG;QAACV,MAAM,EAAE;QAAED;KAAQ;IAEtB,IAAIM,AAAWG,WAAXH,QACA,OAAO,WAAP,GACI,oBAAC;QAAI,WAAW;qBACZ,oBAACM,eAAaA;QAAC,MAAM;;SAG1B,IAAIN,QACP,OAAO,WAAP,GAAO,oBAACO,cAAYA;QAAC,QAAQP;;IAGjC,OAAOH;AACX"}
@@ -37,7 +37,7 @@ const LockedRecord = ({ record: lockRecordEntry })=>{
37
37
  const { getLockRecordEntry } = useRecordLocking();
38
38
  const record = getLockRecordEntry(lockRecordEntry.id);
39
39
  if (!record) return /*#__PURE__*/ react.createElement(Wrapper, null, /*#__PURE__*/ react.createElement(Text, null, "Could not find the lock record. Please refresh the Admin UI."));
40
- if (!lockRecordEntry?.lockedBy) return /*#__PURE__*/ react.createElement(Wrapper, null, /*#__PURE__*/ react.createElement(Title, null), /*#__PURE__*/ react.createElement(Text, null, "This record is locked, but the system cannot find the user that created the record lock. A force-unlock is required to regain editing capabilities for this record."), /*#__PURE__*/ react.createElement(LockedRecordForceUnlock, {
40
+ else if (!lockRecordEntry?.lockedBy) return /*#__PURE__*/ react.createElement(Wrapper, null, /*#__PURE__*/ react.createElement(Title, null), /*#__PURE__*/ react.createElement(Text, null, "This record is locked, but the system cannot find the user that created the record lock. A force-unlock is required to regain editing capabilities for this record."), /*#__PURE__*/ react.createElement(LockedRecordForceUnlock, {
41
41
  id: lockRecordEntry.id,
42
42
  type: record.$lockingType,
43
43
  title: record.meta?.title
@@ -1 +1 @@
1
- {"version":3,"file":"components/LockedRecord/LockedRecord.js","sources":["../../../src/components/LockedRecord/LockedRecord.tsx"],"sourcesContent":["import React from \"react\";\nimport { ReactComponent as LockIcon } from \"@webiny/icons/lock.svg\";\nimport { Grid, Heading, Icon, Text } from \"@webiny/admin-ui\";\nimport { useRecordLocking } from \"~/hooks/index.js\";\nimport { useContentEntry } from \"@webiny/app-headless-cms\";\nimport { LockedRecordForceUnlock } from \"./LockedRecordForceUnlock.js\";\nimport type { IRecordLockingLockRecord } from \"~/types.js\";\n\ninterface IWrapperProps {\n children: React.ReactNode;\n}\n\nconst Wrapper = ({ children }: IWrapperProps) => {\n return (\n <>\n <div className=\"w-5/12 absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 z-50\">\n <div\n className={\n \"flex p-lg border-sm border-neutral-dimmed-darker rounded-3xl bg-neutral-base\"\n }\n >\n <Grid>\n <Grid.Column span={3}>\n <div className=\"h-full flex items-center justify-center bg-neutral-dimmed rounded-md p-lg\">\n <Icon\n style={{\n width: \"64px\",\n height: \"64px\"\n }}\n icon={<LockIcon />}\n label={\"Locked Record\"}\n color={\"accent\"}\n size={\"lg\"}\n />\n </div>\n </Grid.Column>\n <Grid.Column span={9}>\n <div className={\"flex flex-col justify-center\"}>{children}</div>\n </Grid.Column>\n </Grid>\n </div>\n </div>\n {/*<div className=\"absolute inset-0 bg-neutral-dark/50 z-45\"></div>*/}\n </>\n );\n};\n\nconst Title = () => {\n const { entry } = useContentEntry();\n return (\n <Heading level={4} className={\"mb-sm\"}>\n Record ({entry.meta.title}) is locked!\n </Heading>\n );\n};\n\nexport interface ILockedRecordProps {\n record: IRecordLockingLockRecord;\n}\n\nexport const LockedRecord = ({ record: lockRecordEntry }: ILockedRecordProps) => {\n const { getLockRecordEntry } = useRecordLocking();\n\n const record = getLockRecordEntry(lockRecordEntry.id);\n\n if (!record) {\n return (\n <Wrapper>\n <Text>Could not find the lock record. Please refresh the Admin UI.</Text>\n </Wrapper>\n );\n } else if (!lockRecordEntry?.lockedBy) {\n return (\n <Wrapper>\n <Title />\n <Text>\n This record is locked, but the system cannot find the user that created the\n record lock. A force-unlock is required to regain editing capabilities for this\n record.\n </Text>\n <LockedRecordForceUnlock\n id={lockRecordEntry.id}\n type={record.$lockingType}\n title={record.meta?.title}\n />\n </Wrapper>\n );\n }\n return (\n <Wrapper>\n <Title />\n <Text>\n It is locked because <strong>{lockRecordEntry.lockedBy.displayName}</strong> is\n currently editing this record. You can either contact the user and ask them to\n unlock the record, or you can wait for the lock to expire.\n </Text>\n <LockedRecordForceUnlock\n id={lockRecordEntry.id}\n type={record.$lockingType}\n lockedBy={lockRecordEntry.lockedBy}\n title={record.meta?.title}\n />\n </Wrapper>\n );\n};\n"],"names":["Wrapper","children","Grid","Icon","LockIcon","Title","entry","useContentEntry","Heading","LockedRecord","lockRecordEntry","getLockRecordEntry","useRecordLocking","record","Text","LockedRecordForceUnlock"],"mappings":";;;;;;AAYA,MAAMA,UAAU,CAAC,EAAEC,QAAQ,EAAiB,GACjC,WAAP,GACI,wDACI,oBAAC;QAAI,WAAU;qBACX,oBAAC;QACG,WACI;qBAGJ,oBAACC,MAAIA,MAAAA,WAAAA,GACD,oBAACA,KAAK,MAAM;QAAC,MAAM;qBACf,oBAAC;QAAI,WAAU;qBACX,oBAACC,MAAIA;QACD,OAAO;YACH,OAAO;YACP,QAAQ;QACZ;QACA,oBAAM,oBAACC,gBAAQA;QACf,OAAO;QACP,OAAO;QACP,MAAM;wBAIlB,oBAACF,KAAK,MAAM;QAAC,MAAM;qBACf,oBAAC;QAAI,WAAW;OAAiCD;AAU7E,MAAMI,QAAQ;IACV,MAAM,EAAEC,KAAK,EAAE,GAAGC;IAClB,OAAO,WAAP,GACI,oBAACC,SAAOA;QAAC,OAAO;QAAG,WAAW;OAAS,YAC1BF,MAAM,IAAI,CAAC,KAAK,EAAC;AAGtC;AAMO,MAAMG,eAAe,CAAC,EAAE,QAAQC,eAAe,EAAsB;IACxE,MAAM,EAAEC,kBAAkB,EAAE,GAAGC;IAE/B,MAAMC,SAASF,mBAAmBD,gBAAgB,EAAE;IAEpD,IAAI,CAACG,QACD,OAAO,WAAP,GACI,oBAACb,SAAOA,MAAAA,WAAAA,GACJ,oBAACc,MAAIA,MAAC;IAGX,IAAI,CAACJ,iBAAiB,UACzB,OAAO,WAAP,GACI,oBAACV,SAAOA,MAAAA,WAAAA,GACJ,oBAACK,OAAKA,OAAAA,WAAAA,GACN,oBAACS,MAAIA,MAAC,sLAKN,oBAACC,yBAAuBA;QACpB,IAAIL,gBAAgB,EAAE;QACtB,MAAMG,OAAO,YAAY;QACzB,OAAOA,OAAO,IAAI,EAAE;;IAKpC,OAAO,WAAP,GACI,oBAACb,SAAOA,MAAAA,WAAAA,GACJ,oBAACK,OAAKA,OAAAA,WAAAA,GACN,oBAACS,MAAIA,MAAC,uCACmB,oBAAC,gBAAQJ,gBAAgB,QAAQ,CAAC,WAAW,GAAU,gKAIhF,oBAACK,yBAAuBA;QACpB,IAAIL,gBAAgB,EAAE;QACtB,MAAMG,OAAO,YAAY;QACzB,UAAUH,gBAAgB,QAAQ;QAClC,OAAOG,OAAO,IAAI,EAAE;;AAIpC"}
1
+ {"version":3,"file":"components/LockedRecord/LockedRecord.js","sources":["../../../src/components/LockedRecord/LockedRecord.tsx"],"sourcesContent":["import React from \"react\";\nimport { ReactComponent as LockIcon } from \"@webiny/icons/lock.svg\";\nimport { Grid, Heading, Icon, Text } from \"@webiny/admin-ui\";\nimport { useRecordLocking } from \"~/hooks/index.js\";\nimport { useContentEntry } from \"@webiny/app-headless-cms\";\nimport { LockedRecordForceUnlock } from \"./LockedRecordForceUnlock.js\";\nimport type { IRecordLockingLockRecord } from \"~/types.js\";\n\ninterface IWrapperProps {\n children: React.ReactNode;\n}\n\nconst Wrapper = ({ children }: IWrapperProps) => {\n return (\n <>\n <div className=\"w-5/12 absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 z-50\">\n <div\n className={\n \"flex p-lg border-sm border-neutral-dimmed-darker rounded-3xl bg-neutral-base\"\n }\n >\n <Grid>\n <Grid.Column span={3}>\n <div className=\"h-full flex items-center justify-center bg-neutral-dimmed rounded-md p-lg\">\n <Icon\n style={{\n width: \"64px\",\n height: \"64px\"\n }}\n icon={<LockIcon />}\n label={\"Locked Record\"}\n color={\"accent\"}\n size={\"lg\"}\n />\n </div>\n </Grid.Column>\n <Grid.Column span={9}>\n <div className={\"flex flex-col justify-center\"}>{children}</div>\n </Grid.Column>\n </Grid>\n </div>\n </div>\n {/*<div className=\"absolute inset-0 bg-neutral-dark/50 z-45\"></div>*/}\n </>\n );\n};\n\nconst Title = () => {\n const { entry } = useContentEntry();\n return (\n <Heading level={4} className={\"mb-sm\"}>\n Record ({entry.meta.title}) is locked!\n </Heading>\n );\n};\n\nexport interface ILockedRecordProps {\n record: IRecordLockingLockRecord;\n}\n\nexport const LockedRecord = ({ record: lockRecordEntry }: ILockedRecordProps) => {\n const { getLockRecordEntry } = useRecordLocking();\n\n const record = getLockRecordEntry(lockRecordEntry.id);\n\n if (!record) {\n return (\n <Wrapper>\n <Text>Could not find the lock record. Please refresh the Admin UI.</Text>\n </Wrapper>\n );\n } else if (!lockRecordEntry?.lockedBy) {\n return (\n <Wrapper>\n <Title />\n <Text>\n This record is locked, but the system cannot find the user that created the\n record lock. A force-unlock is required to regain editing capabilities for this\n record.\n </Text>\n <LockedRecordForceUnlock\n id={lockRecordEntry.id}\n type={record.$lockingType}\n title={record.meta?.title}\n />\n </Wrapper>\n );\n }\n return (\n <Wrapper>\n <Title />\n <Text>\n It is locked because <strong>{lockRecordEntry.lockedBy.displayName}</strong> is\n currently editing this record. You can either contact the user and ask them to\n unlock the record, or you can wait for the lock to expire.\n </Text>\n <LockedRecordForceUnlock\n id={lockRecordEntry.id}\n type={record.$lockingType}\n lockedBy={lockRecordEntry.lockedBy}\n title={record.meta?.title}\n />\n </Wrapper>\n );\n};\n"],"names":["Wrapper","children","Grid","Icon","LockIcon","Title","entry","useContentEntry","Heading","LockedRecord","lockRecordEntry","getLockRecordEntry","useRecordLocking","record","Text","LockedRecordForceUnlock"],"mappings":";;;;;;AAYA,MAAMA,UAAU,CAAC,EAAEC,QAAQ,EAAiB,GACjC,WAAP,GACI,wDACI,oBAAC;QAAI,WAAU;qBACX,oBAAC;QACG,WACI;qBAGJ,oBAACC,MAAIA,MAAAA,WAAAA,GACD,oBAACA,KAAK,MAAM;QAAC,MAAM;qBACf,oBAAC;QAAI,WAAU;qBACX,oBAACC,MAAIA;QACD,OAAO;YACH,OAAO;YACP,QAAQ;QACZ;QACA,oBAAM,oBAACC,gBAAQA;QACf,OAAO;QACP,OAAO;QACP,MAAM;wBAIlB,oBAACF,KAAK,MAAM;QAAC,MAAM;qBACf,oBAAC;QAAI,WAAW;OAAiCD;AAU7E,MAAMI,QAAQ;IACV,MAAM,EAAEC,KAAK,EAAE,GAAGC;IAClB,OAAO,WAAP,GACI,oBAACC,SAAOA;QAAC,OAAO;QAAG,WAAW;OAAS,YAC1BF,MAAM,IAAI,CAAC,KAAK,EAAC;AAGtC;AAMO,MAAMG,eAAe,CAAC,EAAE,QAAQC,eAAe,EAAsB;IACxE,MAAM,EAAEC,kBAAkB,EAAE,GAAGC;IAE/B,MAAMC,SAASF,mBAAmBD,gBAAgB,EAAE;IAEpD,IAAI,CAACG,QACD,OAAO,WAAP,GACI,oBAACb,SAAOA,MAAAA,WAAAA,GACJ,oBAACc,MAAIA,MAAC;SAGX,IAAI,CAACJ,iBAAiB,UACzB,OAAO,WAAP,GACI,oBAACV,SAAOA,MAAAA,WAAAA,GACJ,oBAACK,OAAKA,OAAAA,WAAAA,GACN,oBAACS,MAAIA,MAAC,sLAKN,oBAACC,yBAAuBA;QACpB,IAAIL,gBAAgB,EAAE;QACtB,MAAMG,OAAO,YAAY;QACzB,OAAOA,OAAO,IAAI,EAAE;;IAKpC,OAAO,WAAP,GACI,oBAACb,SAAOA,MAAAA,WAAAA,GACJ,oBAACK,OAAKA,OAAAA,WAAAA,GACN,oBAACS,MAAIA,MAAC,uCACmB,oBAAC,gBAAQJ,gBAAgB,QAAQ,CAAC,WAAW,GAAU,gKAIhF,oBAACK,yBAAuBA;QACpB,IAAIL,gBAAgB,EAAE;QACtB,MAAMG,OAAO,YAAY;QACzB,UAAUH,gBAAgB,QAAQ;QAClC,OAAOG,OAAO,IAAI,EAAE;;AAIpC"}
@@ -141,7 +141,7 @@ class RecordLocking {
141
141
  }
142
142
  async fetchAndAssignRecords(folderId, type, records) {
143
143
  if (0 === records.length) return;
144
- if (this.loading) return;
144
+ else if (this.loading) return;
145
145
  const assignedIdList = await this.assignRecords(folderId, type, records);
146
146
  if (0 === assignedIdList.length) return;
147
147
  this.setIsLoading(true);
@@ -162,11 +162,11 @@ class RecordLocking {
162
162
  this.setIsLoading(false);
163
163
  }
164
164
  if (result.error) return void this.triggerOnError(result.error);
165
- if (!result.data) return void this.triggerOnError(createRecordLockingError({
165
+ else if (!result.data) return void this.triggerOnError(createRecordLockingError({
166
166
  message: "There is no data in the result and there is no error. Please check the network tab for more info.",
167
167
  code: "NO_DATA_IN_RESULT"
168
168
  }));
169
- if (0 === result.data.length) return;
169
+ else if (0 === result.data.length) return;
170
170
  for (const record of result.data){
171
171
  const index = this.records.findIndex((r)=>{
172
172
  const { id: entryId } = parseIdentifier(record.id);
@@ -1 +1 @@
1
- {"version":3,"file":"domain/RecordLocking.js","sources":["../../src/domain/RecordLocking.ts"],"sourcesContent":["import type {\n IRecordLocking,\n IRecordLockingUpdateEntryLockResult\n} from \"./abstractions/IRecordLocking.js\";\nimport type { ApolloClient } from \"apollo-client\";\nimport { RecordLockingGetLockRecord } from \"./RecordLockingGetLockRecord.js\";\nimport { RecordLockingIsEntryLocked } from \"./RecordLockingIsEntryLocked.js\";\nimport { RecordLockingListLockRecords } from \"./RecordLockingListLockRecords.js\";\nimport { RecordLockingLockEntry } from \"./RecordLockingLockEntry.js\";\nimport { RecordLockingUnlockEntry } from \"./RecordLockingUnlockEntry.js\";\nimport { RecordLockingClient } from \"./RecordLockingClient.js\";\nimport type { IRecordLockingGetLockRecord } from \"./abstractions/IRecordLockingGetLockRecord.js\";\nimport type { IRecordLockingIsEntryLocked } from \"./abstractions/IRecordLockingIsEntryLocked.js\";\nimport type {\n IRecordLockingListLockRecords,\n IRecordLockingListLockRecordsResult\n} from \"./abstractions/IRecordLockingListLockRecords.js\";\nimport type { IRecordLockingLockEntry } from \"./abstractions/IRecordLockingLockEntry.js\";\nimport type {\n IRecordLockingUnlockEntry,\n IRecordLockingUnlockEntryResult\n} from \"./abstractions/IRecordLockingUnlockEntry.js\";\nimport type {\n IFetchLockedEntryLockRecordParams,\n IFetchLockRecordParams,\n IFetchLockRecordResult,\n IIsRecordLockedParams,\n IPossiblyRecordLockingRecord,\n IRecordLockingError,\n IRecordLockingLockRecord,\n IRecordLockingRecord,\n IUnlockEntryParams,\n IUpdateEntryLockParams\n} from \"~/types.js\";\nimport { createRecordLockingError } from \"./utils/createRecordLockingError.js\";\nimport { parseIdentifier } from \"@webiny/utils/parseIdentifier.js\";\nimport { createCacheKey } from \"~/utils/createCacheKey.js\";\nimport { RecordLockingUpdateEntryLock } from \"~/domain/RecordLockingUpdateEntryLock.js\";\nimport type { IRecordLockingUpdateEntryLock } from \"~/domain/abstractions/IRecordLockingUpdateEntryLock.js\";\nimport { RecordLockingGetLockedEntryLockRecord } from \"~/domain/RecordLockingGetLockedEntryLockRecord.js\";\nimport type { IRecordLockingGetLockedEntryLockRecord } from \"./abstractions/IRecordLockingGetLockedEntryLockRecord.js\";\n\nexport interface ICreateRecordLockingParams {\n client: ApolloClient<any>;\n setLoading: (loading: boolean) => void;\n}\n\nexport interface IRecordLockingParams {\n setLoading: (loading: boolean) => void;\n getLockRecord: IRecordLockingGetLockRecord;\n getLockedEntryLockRecord: IRecordLockingGetLockedEntryLockRecord;\n isEntryLocked: IRecordLockingIsEntryLocked;\n listLockRecords: IRecordLockingListLockRecords;\n lockEntry: IRecordLockingLockEntry;\n unlockEntry: IRecordLockingUnlockEntry;\n updateEntryLock: IRecordLockingUpdateEntryLock;\n}\n\nexport interface IOnErrorCb {\n (error: IRecordLockingError): void;\n}\n\nclass RecordLocking<\n T extends IPossiblyRecordLockingRecord = IPossiblyRecordLockingRecord\n> implements IRecordLocking<T> {\n private currentRecordType?: string;\n private currentFolderId?: string;\n private currentRecordsCacheKey?: string;\n private readonly _setLoading: (loading: boolean) => void;\n public loading = false;\n public records: IRecordLockingRecord[] = [];\n private readonly _getLockRecord: IRecordLockingGetLockRecord;\n private readonly _getLockedEntryLockRecord: IRecordLockingGetLockedEntryLockRecord;\n private readonly _listLockRecords: IRecordLockingListLockRecords;\n private readonly _unlockEntry: IRecordLockingUnlockEntry;\n private readonly _updateEntryLock: IRecordLockingUpdateEntryLock;\n\n private onErrorCb: IOnErrorCb | null = null;\n\n public constructor(params: IRecordLockingParams) {\n this._setLoading = params.setLoading;\n this._getLockRecord = params.getLockRecord;\n this._getLockedEntryLockRecord = params.getLockedEntryLockRecord;\n this._listLockRecords = params.listLockRecords;\n this._unlockEntry = params.unlockEntry;\n this._updateEntryLock = params.updateEntryLock;\n }\n\n public async setRecords(\n folderId: string,\n type: string,\n records: T[]\n ): Promise<IRecordLockingRecord[] | undefined> {\n const result = await this.fetchAndAssignRecords(folderId, type, records);\n if (!result) {\n return undefined;\n }\n\n return result.map(record => {\n const { id: entryId } = parseIdentifier(record.id);\n return {\n ...record,\n $type: \"RECORD\",\n $lockingType: type,\n $locked: record.$locked,\n $selectable: record.$locked ? false : record.$selectable,\n entryId\n };\n });\n }\n\n public async fetchLockRecord(params: IFetchLockRecordParams): Promise<IFetchLockRecordResult> {\n const { id, $lockingType } = params;\n\n const { id: entryId } = parseIdentifier(id);\n\n try {\n const result = await this._getLockRecord.execute({\n id: entryId,\n type: $lockingType\n });\n\n return {\n data: result.data,\n error: result.error\n };\n } catch (ex) {\n return {\n data: null,\n error: ex\n };\n }\n }\n\n public async fetchLockedEntryLockRecord(\n params: IFetchLockedEntryLockRecordParams\n ): Promise<IRecordLockingLockRecord | null> {\n const { id, $lockingType } = params;\n\n const { id: entryId } = parseIdentifier(id);\n const result = await this._getLockedEntryLockRecord.execute({\n id: entryId,\n type: $lockingType\n });\n return result.data;\n }\n\n public getLockRecordEntry(id: string): IRecordLockingRecord | undefined {\n return this.records.find(record => {\n const { id: entryId } = parseIdentifier(id);\n return record.entryId === entryId;\n });\n }\n\n public isRecordLocked(record: IIsRecordLockedParams): boolean {\n const result = this.records.find(r => {\n const { id: entryId } = parseIdentifier(record.id);\n\n return r.entryId === entryId && !!r.$locked && r.$lockingType === record.$lockingType;\n });\n if (!result?.$locked?.expiresOn) {\n return false;\n }\n const isExpired = this.isLockExpired(result.$locked.expiresOn);\n return !isExpired;\n }\n\n public async updateEntryLock(\n params: IUpdateEntryLockParams\n ): Promise<IRecordLockingUpdateEntryLockResult> {\n try {\n return await this._updateEntryLock.execute({\n id: params.id,\n type: params.$lockingType\n });\n } catch (ex) {\n this.triggerOnError(ex);\n return {\n data: null,\n error: ex\n };\n }\n }\n\n public removeEntryLock(params: IUnlockEntryParams): void {\n const index = this.records.findIndex(record => {\n return record.entryId === params.id && record.$lockingType === params.$lockingType;\n });\n if (index === -1) {\n return;\n }\n this.records[index] = {\n ...this.records[index],\n $locked: null,\n $selectable: true\n };\n }\n\n public async unlockEntry(\n params: IUnlockEntryParams,\n force?: boolean\n ): Promise<IRecordLockingUnlockEntryResult> {\n try {\n const result = await this._unlockEntry.execute({\n id: params.id,\n type: params.$lockingType,\n force\n });\n\n const id = result.data?.id;\n if (!id) {\n return result;\n }\n this.removeEntryLock({\n ...params\n });\n return result;\n } catch (ex) {\n this.triggerOnError(ex);\n return {\n data: null,\n error: ex\n };\n }\n }\n\n public onError(cb: IOnErrorCb): void {\n this.onErrorCb = cb;\n }\n\n public triggerOnError(error: IRecordLockingError): void {\n this.setIsLoading(false);\n if (!this.onErrorCb) {\n return;\n }\n this.onErrorCb(error);\n }\n\n public isLockExpired(input: Date | string): boolean {\n const expiresOn = new Date(input);\n return expiresOn <= new Date();\n }\n\n private setIsLoading(loading: boolean): void {\n this._setLoading(loading);\n this.loading = loading;\n }\n\n private async fetchAndAssignRecords(\n folderId: string,\n type: string,\n records: T[]\n ): Promise<IPossiblyRecordLockingRecord[] | undefined> {\n if (records.length === 0) {\n return;\n } else if (this.loading) {\n return;\n }\n const assignedIdList = await this.assignRecords(folderId, type, records);\n if (assignedIdList.length === 0) {\n return;\n }\n this.setIsLoading(true);\n let result: IRecordLockingListLockRecordsResult;\n try {\n result = await this._listLockRecords.execute({\n where: {\n id_in: assignedIdList,\n type\n },\n limit: 10000\n });\n } catch (ex) {\n console.error(ex);\n this.triggerOnError(ex);\n return;\n } finally {\n this.setIsLoading(false);\n }\n if (result.error) {\n this.triggerOnError(result.error);\n return;\n } else if (!result.data) {\n this.triggerOnError(\n createRecordLockingError({\n message: `There is no data in the result and there is no error. Please check the network tab for more info.`,\n code: \"NO_DATA_IN_RESULT\"\n })\n );\n return;\n } else if (result.data.length === 0) {\n return;\n }\n\n for (const record of result.data) {\n const index = this.records.findIndex(r => {\n const { id: entryId } = parseIdentifier(record.id);\n return r.entryId === entryId;\n });\n if (index < 0) {\n console.error(`There is no record with id ${record.id} in the records array.`);\n continue;\n }\n this.records[index] = {\n ...this.records[index],\n $locked: {\n lockedBy: record.lockedBy,\n expiresOn: record.expiresOn,\n lockedOn: record.lockedOn,\n actions: record.actions\n }\n };\n }\n\n return this.records;\n }\n /**\n * Assign records and return the assigned ID list.\n */\n private async assignRecords(folderId: string, type: string, records: T[]): Promise<string[]> {\n /**\n * First we check the record keys against ones in the local cache.\n */\n const keys = records.map(record => {\n if (record.entryId) {\n return record.entryId;\n }\n const { id: entryId } = parseIdentifier(record.id);\n return entryId;\n });\n const cacheKey = await createCacheKey(keys);\n if (this.currentRecordsCacheKey === cacheKey) {\n return [];\n }\n this.currentRecordsCacheKey = cacheKey;\n\n /**\n * Reset records if new type is not as same as the old type / folderId.\n */\n if (this.currentRecordType !== type || this.currentFolderId !== folderId) {\n this.records = [];\n this.currentRecordType = type;\n this.currentFolderId = folderId;\n }\n\n return records.reduce<string[]>((collection, record) => {\n const { id: entryId } = parseIdentifier(record.id);\n const index = this.records.findIndex(r => r.entryId === entryId);\n if (index >= 0) {\n return collection;\n }\n this.records.push({\n ...record,\n entryId,\n $lockingType: type,\n $locked: undefined\n });\n if (record.$type !== \"RECORD\") {\n return collection;\n }\n collection.push(entryId);\n return collection;\n }, []);\n }\n}\n\nexport const createRecordLocking = <T extends IRecordLockingRecord>(\n config: ICreateRecordLockingParams\n): IRecordLocking => {\n const client = new RecordLockingClient({\n client: config.client\n });\n\n const getLockRecord = new RecordLockingGetLockRecord({\n client\n });\n\n const getLockedEntryLockRecord = new RecordLockingGetLockedEntryLockRecord({\n client\n });\n\n const isEntryLocked = new RecordLockingIsEntryLocked({\n client\n });\n\n const listLockRecords = new RecordLockingListLockRecords({\n client\n });\n\n const lockEntry = new RecordLockingLockEntry({\n client\n });\n\n const unlockEntry = new RecordLockingUnlockEntry({\n client\n });\n\n const updateEntryLock = new RecordLockingUpdateEntryLock({\n client\n });\n\n return new RecordLocking<T>({\n setLoading: config.setLoading,\n getLockRecord,\n getLockedEntryLockRecord,\n isEntryLocked,\n listLockRecords,\n updateEntryLock,\n lockEntry,\n unlockEntry\n });\n};\n"],"names":["RecordLocking","params","folderId","type","records","result","record","entryId","parseIdentifier","id","$lockingType","ex","r","isExpired","index","force","cb","error","input","expiresOn","Date","loading","assignedIdList","console","createRecordLockingError","keys","cacheKey","createCacheKey","collection","undefined","createRecordLocking","config","client","RecordLockingClient","getLockRecord","RecordLockingGetLockRecord","getLockedEntryLockRecord","RecordLockingGetLockedEntryLockRecord","isEntryLocked","RecordLockingIsEntryLocked","listLockRecords","RecordLockingListLockRecords","lockEntry","RecordLockingLockEntry","unlockEntry","RecordLockingUnlockEntry","updateEntryLock","RecordLockingUpdateEntryLock"],"mappings":"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"}
1
+ {"version":3,"file":"domain/RecordLocking.js","sources":["../../src/domain/RecordLocking.ts"],"sourcesContent":["import type {\n IRecordLocking,\n IRecordLockingUpdateEntryLockResult\n} from \"./abstractions/IRecordLocking.js\";\nimport type { ApolloClient } from \"apollo-client\";\nimport { RecordLockingGetLockRecord } from \"./RecordLockingGetLockRecord.js\";\nimport { RecordLockingIsEntryLocked } from \"./RecordLockingIsEntryLocked.js\";\nimport { RecordLockingListLockRecords } from \"./RecordLockingListLockRecords.js\";\nimport { RecordLockingLockEntry } from \"./RecordLockingLockEntry.js\";\nimport { RecordLockingUnlockEntry } from \"./RecordLockingUnlockEntry.js\";\nimport { RecordLockingClient } from \"./RecordLockingClient.js\";\nimport type { IRecordLockingGetLockRecord } from \"./abstractions/IRecordLockingGetLockRecord.js\";\nimport type { IRecordLockingIsEntryLocked } from \"./abstractions/IRecordLockingIsEntryLocked.js\";\nimport type {\n IRecordLockingListLockRecords,\n IRecordLockingListLockRecordsResult\n} from \"./abstractions/IRecordLockingListLockRecords.js\";\nimport type { IRecordLockingLockEntry } from \"./abstractions/IRecordLockingLockEntry.js\";\nimport type {\n IRecordLockingUnlockEntry,\n IRecordLockingUnlockEntryResult\n} from \"./abstractions/IRecordLockingUnlockEntry.js\";\nimport type {\n IFetchLockedEntryLockRecordParams,\n IFetchLockRecordParams,\n IFetchLockRecordResult,\n IIsRecordLockedParams,\n IPossiblyRecordLockingRecord,\n IRecordLockingError,\n IRecordLockingLockRecord,\n IRecordLockingRecord,\n IUnlockEntryParams,\n IUpdateEntryLockParams\n} from \"~/types.js\";\nimport { createRecordLockingError } from \"./utils/createRecordLockingError.js\";\nimport { parseIdentifier } from \"@webiny/utils/parseIdentifier.js\";\nimport { createCacheKey } from \"~/utils/createCacheKey.js\";\nimport { RecordLockingUpdateEntryLock } from \"~/domain/RecordLockingUpdateEntryLock.js\";\nimport type { IRecordLockingUpdateEntryLock } from \"~/domain/abstractions/IRecordLockingUpdateEntryLock.js\";\nimport { RecordLockingGetLockedEntryLockRecord } from \"~/domain/RecordLockingGetLockedEntryLockRecord.js\";\nimport type { IRecordLockingGetLockedEntryLockRecord } from \"./abstractions/IRecordLockingGetLockedEntryLockRecord.js\";\n\nexport interface ICreateRecordLockingParams {\n client: ApolloClient<any>;\n setLoading: (loading: boolean) => void;\n}\n\nexport interface IRecordLockingParams {\n setLoading: (loading: boolean) => void;\n getLockRecord: IRecordLockingGetLockRecord;\n getLockedEntryLockRecord: IRecordLockingGetLockedEntryLockRecord;\n isEntryLocked: IRecordLockingIsEntryLocked;\n listLockRecords: IRecordLockingListLockRecords;\n lockEntry: IRecordLockingLockEntry;\n unlockEntry: IRecordLockingUnlockEntry;\n updateEntryLock: IRecordLockingUpdateEntryLock;\n}\n\nexport interface IOnErrorCb {\n (error: IRecordLockingError): void;\n}\n\nclass RecordLocking<\n T extends IPossiblyRecordLockingRecord = IPossiblyRecordLockingRecord\n> implements IRecordLocking<T> {\n private currentRecordType?: string;\n private currentFolderId?: string;\n private currentRecordsCacheKey?: string;\n private readonly _setLoading: (loading: boolean) => void;\n public loading = false;\n public records: IRecordLockingRecord[] = [];\n private readonly _getLockRecord: IRecordLockingGetLockRecord;\n private readonly _getLockedEntryLockRecord: IRecordLockingGetLockedEntryLockRecord;\n private readonly _listLockRecords: IRecordLockingListLockRecords;\n private readonly _unlockEntry: IRecordLockingUnlockEntry;\n private readonly _updateEntryLock: IRecordLockingUpdateEntryLock;\n\n private onErrorCb: IOnErrorCb | null = null;\n\n public constructor(params: IRecordLockingParams) {\n this._setLoading = params.setLoading;\n this._getLockRecord = params.getLockRecord;\n this._getLockedEntryLockRecord = params.getLockedEntryLockRecord;\n this._listLockRecords = params.listLockRecords;\n this._unlockEntry = params.unlockEntry;\n this._updateEntryLock = params.updateEntryLock;\n }\n\n public async setRecords(\n folderId: string,\n type: string,\n records: T[]\n ): Promise<IRecordLockingRecord[] | undefined> {\n const result = await this.fetchAndAssignRecords(folderId, type, records);\n if (!result) {\n return undefined;\n }\n\n return result.map(record => {\n const { id: entryId } = parseIdentifier(record.id);\n return {\n ...record,\n $type: \"RECORD\",\n $lockingType: type,\n $locked: record.$locked,\n $selectable: record.$locked ? false : record.$selectable,\n entryId\n };\n });\n }\n\n public async fetchLockRecord(params: IFetchLockRecordParams): Promise<IFetchLockRecordResult> {\n const { id, $lockingType } = params;\n\n const { id: entryId } = parseIdentifier(id);\n\n try {\n const result = await this._getLockRecord.execute({\n id: entryId,\n type: $lockingType\n });\n\n return {\n data: result.data,\n error: result.error\n };\n } catch (ex) {\n return {\n data: null,\n error: ex\n };\n }\n }\n\n public async fetchLockedEntryLockRecord(\n params: IFetchLockedEntryLockRecordParams\n ): Promise<IRecordLockingLockRecord | null> {\n const { id, $lockingType } = params;\n\n const { id: entryId } = parseIdentifier(id);\n const result = await this._getLockedEntryLockRecord.execute({\n id: entryId,\n type: $lockingType\n });\n return result.data;\n }\n\n public getLockRecordEntry(id: string): IRecordLockingRecord | undefined {\n return this.records.find(record => {\n const { id: entryId } = parseIdentifier(id);\n return record.entryId === entryId;\n });\n }\n\n public isRecordLocked(record: IIsRecordLockedParams): boolean {\n const result = this.records.find(r => {\n const { id: entryId } = parseIdentifier(record.id);\n\n return r.entryId === entryId && !!r.$locked && r.$lockingType === record.$lockingType;\n });\n if (!result?.$locked?.expiresOn) {\n return false;\n }\n const isExpired = this.isLockExpired(result.$locked.expiresOn);\n return !isExpired;\n }\n\n public async updateEntryLock(\n params: IUpdateEntryLockParams\n ): Promise<IRecordLockingUpdateEntryLockResult> {\n try {\n return await this._updateEntryLock.execute({\n id: params.id,\n type: params.$lockingType\n });\n } catch (ex) {\n this.triggerOnError(ex);\n return {\n data: null,\n error: ex\n };\n }\n }\n\n public removeEntryLock(params: IUnlockEntryParams): void {\n const index = this.records.findIndex(record => {\n return record.entryId === params.id && record.$lockingType === params.$lockingType;\n });\n if (index === -1) {\n return;\n }\n this.records[index] = {\n ...this.records[index],\n $locked: null,\n $selectable: true\n };\n }\n\n public async unlockEntry(\n params: IUnlockEntryParams,\n force?: boolean\n ): Promise<IRecordLockingUnlockEntryResult> {\n try {\n const result = await this._unlockEntry.execute({\n id: params.id,\n type: params.$lockingType,\n force\n });\n\n const id = result.data?.id;\n if (!id) {\n return result;\n }\n this.removeEntryLock({\n ...params\n });\n return result;\n } catch (ex) {\n this.triggerOnError(ex);\n return {\n data: null,\n error: ex\n };\n }\n }\n\n public onError(cb: IOnErrorCb): void {\n this.onErrorCb = cb;\n }\n\n public triggerOnError(error: IRecordLockingError): void {\n this.setIsLoading(false);\n if (!this.onErrorCb) {\n return;\n }\n this.onErrorCb(error);\n }\n\n public isLockExpired(input: Date | string): boolean {\n const expiresOn = new Date(input);\n return expiresOn <= new Date();\n }\n\n private setIsLoading(loading: boolean): void {\n this._setLoading(loading);\n this.loading = loading;\n }\n\n private async fetchAndAssignRecords(\n folderId: string,\n type: string,\n records: T[]\n ): Promise<IPossiblyRecordLockingRecord[] | undefined> {\n if (records.length === 0) {\n return;\n } else if (this.loading) {\n return;\n }\n const assignedIdList = await this.assignRecords(folderId, type, records);\n if (assignedIdList.length === 0) {\n return;\n }\n this.setIsLoading(true);\n let result: IRecordLockingListLockRecordsResult;\n try {\n result = await this._listLockRecords.execute({\n where: {\n id_in: assignedIdList,\n type\n },\n limit: 10000\n });\n } catch (ex) {\n console.error(ex);\n this.triggerOnError(ex);\n return;\n } finally {\n this.setIsLoading(false);\n }\n if (result.error) {\n this.triggerOnError(result.error);\n return;\n } else if (!result.data) {\n this.triggerOnError(\n createRecordLockingError({\n message: `There is no data in the result and there is no error. Please check the network tab for more info.`,\n code: \"NO_DATA_IN_RESULT\"\n })\n );\n return;\n } else if (result.data.length === 0) {\n return;\n }\n\n for (const record of result.data) {\n const index = this.records.findIndex(r => {\n const { id: entryId } = parseIdentifier(record.id);\n return r.entryId === entryId;\n });\n if (index < 0) {\n console.error(`There is no record with id ${record.id} in the records array.`);\n continue;\n }\n this.records[index] = {\n ...this.records[index],\n $locked: {\n lockedBy: record.lockedBy,\n expiresOn: record.expiresOn,\n lockedOn: record.lockedOn,\n actions: record.actions\n }\n };\n }\n\n return this.records;\n }\n /**\n * Assign records and return the assigned ID list.\n */\n private async assignRecords(folderId: string, type: string, records: T[]): Promise<string[]> {\n /**\n * First we check the record keys against ones in the local cache.\n */\n const keys = records.map(record => {\n if (record.entryId) {\n return record.entryId;\n }\n const { id: entryId } = parseIdentifier(record.id);\n return entryId;\n });\n const cacheKey = await createCacheKey(keys);\n if (this.currentRecordsCacheKey === cacheKey) {\n return [];\n }\n this.currentRecordsCacheKey = cacheKey;\n\n /**\n * Reset records if new type is not as same as the old type / folderId.\n */\n if (this.currentRecordType !== type || this.currentFolderId !== folderId) {\n this.records = [];\n this.currentRecordType = type;\n this.currentFolderId = folderId;\n }\n\n return records.reduce<string[]>((collection, record) => {\n const { id: entryId } = parseIdentifier(record.id);\n const index = this.records.findIndex(r => r.entryId === entryId);\n if (index >= 0) {\n return collection;\n }\n this.records.push({\n ...record,\n entryId,\n $lockingType: type,\n $locked: undefined\n });\n if (record.$type !== \"RECORD\") {\n return collection;\n }\n collection.push(entryId);\n return collection;\n }, []);\n }\n}\n\nexport const createRecordLocking = <T extends IRecordLockingRecord>(\n config: ICreateRecordLockingParams\n): IRecordLocking => {\n const client = new RecordLockingClient({\n client: config.client\n });\n\n const getLockRecord = new RecordLockingGetLockRecord({\n client\n });\n\n const getLockedEntryLockRecord = new RecordLockingGetLockedEntryLockRecord({\n client\n });\n\n const isEntryLocked = new RecordLockingIsEntryLocked({\n client\n });\n\n const listLockRecords = new RecordLockingListLockRecords({\n client\n });\n\n const lockEntry = new RecordLockingLockEntry({\n client\n });\n\n const unlockEntry = new RecordLockingUnlockEntry({\n client\n });\n\n const updateEntryLock = new RecordLockingUpdateEntryLock({\n client\n });\n\n return new RecordLocking<T>({\n setLoading: config.setLoading,\n getLockRecord,\n getLockedEntryLockRecord,\n isEntryLocked,\n listLockRecords,\n updateEntryLock,\n lockEntry,\n unlockEntry\n });\n};\n"],"names":["RecordLocking","params","folderId","type","records","result","record","entryId","parseIdentifier","id","$lockingType","ex","r","isExpired","index","force","cb","error","input","expiresOn","Date","loading","assignedIdList","console","createRecordLockingError","keys","cacheKey","createCacheKey","collection","undefined","createRecordLocking","config","client","RecordLockingClient","getLockRecord","RecordLockingGetLockRecord","getLockedEntryLockRecord","RecordLockingGetLockedEntryLockRecord","isEntryLocked","RecordLockingIsEntryLocked","listLockRecords","RecordLockingListLockRecords","lockEntry","RecordLockingLockEntry","unlockEntry","RecordLockingUnlockEntry","updateEntryLock","RecordLockingUpdateEntryLock"],"mappings":"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"}
@@ -10,7 +10,7 @@ class RecordLockingGetLockRecord {
10
10
  variables: params
11
11
  });
12
12
  if (result.data.recordLocking.getLockRecord.error) throw new WebinyError(result.data.recordLocking.getLockRecord.error);
13
- if (!result.data.recordLocking.getLockRecord.data) throw new WebinyError("No data returned from server.");
13
+ else if (!result.data.recordLocking.getLockRecord.data) throw new WebinyError("No data returned from server.");
14
14
  return result.data.recordLocking.getLockRecord;
15
15
  }
16
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"domain/RecordLockingGetLockRecord.js","sources":["../../src/domain/RecordLockingGetLockRecord.ts"],"sourcesContent":["import type {\n IRecordLockingGetLockRecord,\n IRecordLockingGetLockRecordExecuteParams,\n IRecordLockingGetLockRecordExecuteResult\n} from \"~/domain/abstractions/IRecordLockingGetLockRecord.js\";\nimport type { IRecordLockingClient } from \"~/domain/abstractions/IRecordLockingClient.js\";\nimport type {\n IRecordLockingGetLockRecordResponse,\n IRecordLockingGetLockRecordVariables\n} from \"~/domain/graphql/getLockRecord.js\";\nimport { GET_LOCK_RECORD_QUERY } from \"~/domain/graphql/getLockRecord.js\";\nimport { WebinyError } from \"@webiny/error\";\n\ninterface Params {\n client: IRecordLockingClient;\n}\n\nexport class RecordLockingGetLockRecord implements IRecordLockingGetLockRecord {\n private readonly client: IRecordLockingClient;\n\n public constructor(params: Params) {\n this.client = params.client;\n }\n public async execute(\n params: IRecordLockingGetLockRecordExecuteParams\n ): Promise<IRecordLockingGetLockRecordExecuteResult> {\n const result = await this.client.query<\n IRecordLockingGetLockRecordResponse,\n IRecordLockingGetLockRecordVariables\n >({\n query: GET_LOCK_RECORD_QUERY,\n variables: params\n });\n if (result.data.recordLocking.getLockRecord.error) {\n throw new WebinyError(result.data.recordLocking.getLockRecord.error);\n } else if (!result.data.recordLocking.getLockRecord.data) {\n throw new WebinyError(\"No data returned from server.\");\n }\n return result.data.recordLocking.getLockRecord;\n }\n}\n"],"names":["RecordLockingGetLockRecord","params","result","GET_LOCK_RECORD_QUERY","WebinyError"],"mappings":";;AAiBO,MAAMA;IAGT,YAAmBC,MAAc,CAAE;QAC/B,IAAI,CAAC,MAAM,GAAGA,OAAO,MAAM;IAC/B;IACA,MAAa,QACTA,MAAgD,EACC;QACjD,MAAMC,SAAS,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAGpC;YACE,OAAOC;YACP,WAAWF;QACf;QACA,IAAIC,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,EAC7C,MAAM,IAAIE,YAAYF,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK;QAChE,IAAI,CAACA,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,EACpD,MAAM,IAAIE,YAAY;QAE1B,OAAOF,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa;IAClD;AACJ"}
1
+ {"version":3,"file":"domain/RecordLockingGetLockRecord.js","sources":["../../src/domain/RecordLockingGetLockRecord.ts"],"sourcesContent":["import type {\n IRecordLockingGetLockRecord,\n IRecordLockingGetLockRecordExecuteParams,\n IRecordLockingGetLockRecordExecuteResult\n} from \"~/domain/abstractions/IRecordLockingGetLockRecord.js\";\nimport type { IRecordLockingClient } from \"~/domain/abstractions/IRecordLockingClient.js\";\nimport type {\n IRecordLockingGetLockRecordResponse,\n IRecordLockingGetLockRecordVariables\n} from \"~/domain/graphql/getLockRecord.js\";\nimport { GET_LOCK_RECORD_QUERY } from \"~/domain/graphql/getLockRecord.js\";\nimport { WebinyError } from \"@webiny/error\";\n\ninterface Params {\n client: IRecordLockingClient;\n}\n\nexport class RecordLockingGetLockRecord implements IRecordLockingGetLockRecord {\n private readonly client: IRecordLockingClient;\n\n public constructor(params: Params) {\n this.client = params.client;\n }\n public async execute(\n params: IRecordLockingGetLockRecordExecuteParams\n ): Promise<IRecordLockingGetLockRecordExecuteResult> {\n const result = await this.client.query<\n IRecordLockingGetLockRecordResponse,\n IRecordLockingGetLockRecordVariables\n >({\n query: GET_LOCK_RECORD_QUERY,\n variables: params\n });\n if (result.data.recordLocking.getLockRecord.error) {\n throw new WebinyError(result.data.recordLocking.getLockRecord.error);\n } else if (!result.data.recordLocking.getLockRecord.data) {\n throw new WebinyError(\"No data returned from server.\");\n }\n return result.data.recordLocking.getLockRecord;\n }\n}\n"],"names":["RecordLockingGetLockRecord","params","result","GET_LOCK_RECORD_QUERY","WebinyError"],"mappings":";;AAiBO,MAAMA;IAGT,YAAmBC,MAAc,CAAE;QAC/B,IAAI,CAAC,MAAM,GAAGA,OAAO,MAAM;IAC/B;IACA,MAAa,QACTA,MAAgD,EACC;QACjD,MAAMC,SAAS,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAGpC;YACE,OAAOC;YACP,WAAWF;QACf;QACA,IAAIC,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,EAC7C,MAAM,IAAIE,YAAYF,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK;aAChE,IAAI,CAACA,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,EACpD,MAAM,IAAIE,YAAY;QAE1B,OAAOF,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa;IAClD;AACJ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/app-record-locking",
3
- "version": "6.4.11-beta.1",
3
+ "version": "6.4.12-beta.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./index.js",
@@ -18,15 +18,15 @@
18
18
  "license": "MIT",
19
19
  "dependencies": {
20
20
  "@apollo/react-hooks": "3.1.5",
21
- "@webiny/admin-ui": "6.4.11-beta.1",
22
- "@webiny/app": "6.4.11-beta.1",
23
- "@webiny/app-aco": "6.4.11-beta.1",
24
- "@webiny/app-admin": "6.4.11-beta.1",
25
- "@webiny/app-headless-cms": "6.4.11-beta.1",
26
- "@webiny/app-websockets": "6.4.11-beta.1",
27
- "@webiny/error": "6.4.11-beta.1",
28
- "@webiny/icons": "6.4.11-beta.1",
29
- "@webiny/utils": "6.4.11-beta.1",
21
+ "@webiny/admin-ui": "6.4.12-beta.0",
22
+ "@webiny/app": "6.4.12-beta.0",
23
+ "@webiny/app-aco": "6.4.12-beta.0",
24
+ "@webiny/app-admin": "6.4.12-beta.0",
25
+ "@webiny/app-headless-cms": "6.4.12-beta.0",
26
+ "@webiny/app-websockets": "6.4.12-beta.0",
27
+ "@webiny/error": "6.4.12-beta.0",
28
+ "@webiny/icons": "6.4.12-beta.0",
29
+ "@webiny/utils": "6.4.12-beta.0",
30
30
  "apollo-client": "2.6.10",
31
31
  "apollo-link": "1.2.14",
32
32
  "crypto-hash": "4.0.1",
@@ -35,7 +35,7 @@
35
35
  "react-dom": "18.3.1"
36
36
  },
37
37
  "devDependencies": {
38
- "@webiny/build-tools": "6.4.11-beta.1",
38
+ "@webiny/build-tools": "6.4.12-beta.0",
39
39
  "rimraf": "6.1.3",
40
40
  "typescript": "6.0.3"
41
41
  },