@webiny/app-aco 0.0.0-unstable.2af142b57e → 0.0.0-unstable.496cf268ac

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.
Files changed (84) hide show
  1. package/README.md +107 -47
  2. package/components/Dialogs/DialogCreate.d.ts +1 -1
  3. package/components/Dialogs/DialogCreate.js +55 -28
  4. package/components/Dialogs/DialogCreate.js.map +1 -1
  5. package/components/Dialogs/DialogDelete.js +1 -1
  6. package/components/Dialogs/DialogDelete.js.map +1 -1
  7. package/components/Dialogs/DialogMove.d.ts +11 -0
  8. package/components/Dialogs/DialogMove.js +115 -0
  9. package/components/Dialogs/DialogMove.js.map +1 -0
  10. package/components/Dialogs/DialogUpdate.js +30 -45
  11. package/components/Dialogs/DialogUpdate.js.map +1 -1
  12. package/components/Dialogs/styled.d.ts +15 -5
  13. package/components/Dialogs/styled.js +8 -3
  14. package/components/Dialogs/styled.js.map +1 -1
  15. package/components/Tree/ButtonCreate/styled.d.ts +12 -12
  16. package/components/Tree/ButtonCreate/styled.js +1 -1
  17. package/components/Tree/ButtonCreate/styled.js.map +1 -1
  18. package/components/Tree/Empty/styled.d.ts +5 -2
  19. package/components/Tree/List/index.d.ts +3 -1
  20. package/components/Tree/List/index.js +4 -1
  21. package/components/Tree/List/index.js.map +1 -1
  22. package/components/Tree/List/utils.d.ts +2 -1
  23. package/components/Tree/List/utils.js +4 -0
  24. package/components/Tree/List/utils.js.map +1 -1
  25. package/components/Tree/Loader/index.js +2 -1
  26. package/components/Tree/Loader/index.js.map +1 -1
  27. package/components/Tree/Loader/styled.d.ts +9 -3
  28. package/components/Tree/MenuActions/index.js +10 -3
  29. package/components/Tree/MenuActions/index.js.map +1 -1
  30. package/components/Tree/MenuActions/styled.d.ts +8 -2
  31. package/components/Tree/MenuActions/styled.js +8 -2
  32. package/components/Tree/MenuActions/styled.js.map +1 -1
  33. package/components/Tree/Node/index.d.ts +4 -2
  34. package/components/Tree/Node/index.js +11 -6
  35. package/components/Tree/Node/index.js.map +1 -1
  36. package/components/Tree/Node/styled.d.ts +29 -24
  37. package/components/Tree/Node/styled.js +4 -4
  38. package/components/Tree/Node/styled.js.map +1 -1
  39. package/components/Tree/NodePreview/styled.d.ts +5 -2
  40. package/components/Tree/Placeholder/styled.d.ts +5 -2
  41. package/components/Tree/Title/styled.d.ts +9 -3
  42. package/components/Tree/Title/styled.js +1 -1
  43. package/components/Tree/Title/styled.js.map +1 -1
  44. package/components/Tree/index.d.ts +3 -0
  45. package/components/Tree/index.js +8 -3
  46. package/components/Tree/index.js.map +1 -1
  47. package/components/Tree/styled.d.ts +5 -2
  48. package/components/Tree/styled.js +1 -1
  49. package/components/Tree/styled.js.map +1 -1
  50. package/contexts/folders.js +1 -1
  51. package/contexts/folders.js.map +1 -1
  52. package/contexts/links.d.ts +18 -0
  53. package/contexts/links.js +371 -0
  54. package/contexts/links.js.map +1 -0
  55. package/contexts/records.d.ts +12 -6
  56. package/contexts/records.js +97 -36
  57. package/contexts/records.js.map +1 -1
  58. package/graphql/links.gql.d.ts +5 -0
  59. package/graphql/links.gql.js +34 -0
  60. package/graphql/links.gql.js.map +1 -0
  61. package/graphql/records.gql.js +2 -2
  62. package/graphql/records.gql.js.map +1 -1
  63. package/hooks/index.d.ts +1 -0
  64. package/hooks/index.js +11 -0
  65. package/hooks/index.js.map +1 -1
  66. package/hooks/useAcoList.d.ts +18 -0
  67. package/hooks/useAcoList.js +137 -0
  68. package/hooks/useAcoList.js.map +1 -0
  69. package/hooks/useLinks.d.ts +20 -0
  70. package/hooks/useLinks.js +65 -0
  71. package/hooks/useLinks.js.map +1 -0
  72. package/hooks/useRecords.d.ts +12 -8
  73. package/hooks/useRecords.js +16 -6
  74. package/hooks/useRecords.js.map +1 -1
  75. package/index.d.ts +1 -1
  76. package/index.js +6 -0
  77. package/index.js.map +1 -1
  78. package/package.json +13 -11
  79. package/sorting.d.ts +3 -0
  80. package/sorting.js +32 -0
  81. package/sorting.js.map +1 -0
  82. package/types.d.ts +21 -5
  83. package/types.js +14 -1
  84. package/types.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["FolderTree","type","title","focusedFolderId","onFolderClick","onTitleClick","useFolders","folders","useState","createDialogOpen","setCreateDialogOpen","isDragging","setIsDragging","renderList","length","undefined"],"sources":["index.tsx"],"sourcesContent":["import React, { useState } from \"react\";\n\nimport { NodeModel } from \"@minoru/react-dnd-treeview\";\n\nimport { useFolders } from \"~/hooks/useFolders\";\n\nimport { CreateButton } from \"./ButtonCreate\";\nimport { Empty } from \"~/components/Tree/Empty\";\nimport { Loader } from \"./Loader\";\nimport { List } from \"./List\";\nimport { Title } from \"./Title\";\nimport { FolderDialogCreate } from \"~/components\";\n\nimport { Container } from \"./styled\";\n\nimport { DndItemData } from \"~/types\";\n\ntype Props = {\n type: string;\n title: string;\n onFolderClick: (data: NodeModel<DndItemData>[\"data\"]) => void;\n onTitleClick?: (event: React.MouseEvent<HTMLElement>) => void;\n focusedFolderId?: string;\n};\n\nexport const FolderTree: React.FC<Props> = ({\n type,\n title,\n focusedFolderId,\n onFolderClick,\n onTitleClick\n}) => {\n const { folders } = useFolders(type);\n const [createDialogOpen, setCreateDialogOpen] = useState<boolean>(false);\n\n // Little CSS trick here: since the folder title has absolute position, user can drag a folder over it and move it to root folder.\n // While we are moving folders around we disable any title pointer event.\n const [isDragging, setIsDragging] = useState<boolean>(false);\n\n const renderList = () => {\n if (!folders) {\n return <Loader />;\n }\n\n if (folders.length > 0) {\n return (\n <>\n <List\n type={type}\n folders={folders}\n onFolderClick={onFolderClick}\n focusedFolderId={focusedFolderId}\n onDragStart={() => setIsDragging(true)}\n onDragEnd={() => setIsDragging(false)}\n />\n <CreateButton onClick={() => setCreateDialogOpen(true)} />\n </>\n );\n }\n\n return (\n <>\n <Empty />\n <CreateButton onClick={() => setCreateDialogOpen(true)} />\n </>\n );\n };\n\n return (\n <Container>\n <Title title={title} onClick={onTitleClick} isDragging={isDragging} />\n {renderList()}\n <FolderDialogCreate\n type={type}\n open={createDialogOpen}\n onClose={() => setCreateDialogOpen(false)}\n parentId={undefined}\n />\n </Container>\n );\n};\n"],"mappings":";;;;;;;;;AAAA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAYO,IAAMA,UAA2B,GAAG,SAA9BA,UAA2B,OAMlC;EAAA,IALFC,IAAI,QAAJA,IAAI;IACJC,KAAK,QAALA,KAAK;IACLC,eAAe,QAAfA,eAAe;IACfC,aAAa,QAAbA,aAAa;IACbC,YAAY,QAAZA,YAAY;EAEZ,kBAAoB,IAAAC,uBAAU,EAACL,IAAI,CAAC;IAA5BM,OAAO,eAAPA,OAAO;EACf,gBAAgD,IAAAC,eAAQ,EAAU,KAAK,CAAC;IAAA;IAAjEC,gBAAgB;IAAEC,mBAAmB;;EAE5C;EACA;EACA,iBAAoC,IAAAF,eAAQ,EAAU,KAAK,CAAC;IAAA;IAArDG,UAAU;IAAEC,aAAa;EAEhC,IAAMC,UAAU,GAAG,SAAbA,UAAU,GAAS;IACrB,IAAI,CAACN,OAAO,EAAE;MACV,oBAAO,6BAAC,cAAM,OAAG;IACrB;IAEA,IAAIA,OAAO,CAACO,MAAM,GAAG,CAAC,EAAE;MACpB,oBACI,yEACI,6BAAC,UAAI;QACD,IAAI,EAAEb,IAAK;QACX,OAAO,EAAEM,OAAQ;QACjB,aAAa,EAAEH,aAAc;QAC7B,eAAe,EAAED,eAAgB;QACjC,WAAW,EAAE;UAAA,OAAMS,aAAa,CAAC,IAAI,CAAC;QAAA,CAAC;QACvC,SAAS,EAAE;UAAA,OAAMA,aAAa,CAAC,KAAK,CAAC;QAAA;MAAC,EACxC,eACF,6BAAC,0BAAY;QAAC,OAAO,EAAE;UAAA,OAAMF,mBAAmB,CAAC,IAAI,CAAC;QAAA;MAAC,EAAG,CAC3D;IAEX;IAEA,oBACI,yEACI,6BAAC,YAAK,OAAG,eACT,6BAAC,0BAAY;MAAC,OAAO,EAAE;QAAA,OAAMA,mBAAmB,CAAC,IAAI,CAAC;MAAA;IAAC,EAAG,CAC3D;EAEX,CAAC;EAED,oBACI,6BAAC,iBAAS,qBACN,6BAAC,YAAK;IAAC,KAAK,EAAER,KAAM;IAAC,OAAO,EAAEG,YAAa;IAAC,UAAU,EAAEM;EAAW,EAAG,EACrEE,UAAU,EAAE,eACb,6BAAC,oBAAkB;IACf,IAAI,EAAEZ,IAAK;IACX,IAAI,EAAEQ,gBAAiB;IACvB,OAAO,EAAE;MAAA,OAAMC,mBAAmB,CAAC,KAAK,CAAC;IAAA,CAAC;IAC1C,QAAQ,EAAEK;EAAU,EACtB,CACM;AAEpB,CAAC;AAAC"}
1
+ {"version":3,"names":["FolderTree","type","title","focusedFolderId","hiddenFolderIds","enableActions","enableCreate","onFolderClick","onTitleClick","useFolders","folders","useState","createDialogOpen","setCreateDialogOpen","isDragging","setIsDragging","renderList","length","undefined"],"sources":["index.tsx"],"sourcesContent":["import React, { useState } from \"react\";\n\nimport { NodeModel } from \"@minoru/react-dnd-treeview\";\n\nimport { useFolders } from \"~/hooks/useFolders\";\n\nimport { CreateButton } from \"./ButtonCreate\";\nimport { Empty } from \"~/components/Tree/Empty\";\nimport { Loader } from \"./Loader\";\nimport { List } from \"./List\";\nimport { Title } from \"./Title\";\nimport { FolderDialogCreate } from \"~/components\";\n\nimport { Container } from \"./styled\";\n\nimport { DndItemData } from \"~/types\";\n\ntype Props = {\n type: string;\n title: string;\n onFolderClick: (data: NodeModel<DndItemData>[\"data\"]) => void;\n enableCreate?: boolean;\n enableActions?: boolean;\n onTitleClick?: (event: React.MouseEvent<HTMLElement>) => void;\n focusedFolderId?: string;\n hiddenFolderIds?: string[];\n};\n\nexport const FolderTree: React.FC<Props> = ({\n type,\n title,\n focusedFolderId,\n hiddenFolderIds,\n enableActions,\n enableCreate,\n onFolderClick,\n onTitleClick\n}) => {\n const { folders } = useFolders(type);\n const [createDialogOpen, setCreateDialogOpen] = useState<boolean>(false);\n\n // Little CSS trick here: since the folder title has absolute position, user can drag a folder over it and move it to root folder.\n // While we are moving folders around we disable any title pointer event.\n const [isDragging, setIsDragging] = useState<boolean>(false);\n\n const renderList = () => {\n if (!folders) {\n return <Loader />;\n }\n\n if (folders.length > 0) {\n return (\n <>\n <List\n type={type}\n folders={folders}\n onFolderClick={onFolderClick}\n focusedFolderId={focusedFolderId}\n hiddenFolderIds={hiddenFolderIds}\n enableActions={enableActions}\n onDragStart={() => setIsDragging(true)}\n onDragEnd={() => setIsDragging(false)}\n />\n {enableCreate && <CreateButton onClick={() => setCreateDialogOpen(true)} />}\n </>\n );\n }\n\n return (\n <>\n <Empty />\n <CreateButton onClick={() => setCreateDialogOpen(true)} />\n </>\n );\n };\n\n return (\n <Container>\n <Title title={title} onClick={onTitleClick} isDragging={isDragging} />\n {renderList()}\n {enableCreate && (\n <FolderDialogCreate\n type={type}\n open={createDialogOpen}\n onClose={() => setCreateDialogOpen(false)}\n currentParentId={undefined}\n />\n )}\n </Container>\n );\n};\n"],"mappings":";;;;;;;;;AAAA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAeO,IAAMA,UAA2B,GAAG,SAA9BA,UAA2B,OASlC;EAAA,IARFC,IAAI,QAAJA,IAAI;IACJC,KAAK,QAALA,KAAK;IACLC,eAAe,QAAfA,eAAe;IACfC,eAAe,QAAfA,eAAe;IACfC,aAAa,QAAbA,aAAa;IACbC,YAAY,QAAZA,YAAY;IACZC,aAAa,QAAbA,aAAa;IACbC,YAAY,QAAZA,YAAY;EAEZ,kBAAoB,IAAAC,uBAAU,EAACR,IAAI,CAAC;IAA5BS,OAAO,eAAPA,OAAO;EACf,gBAAgD,IAAAC,eAAQ,EAAU,KAAK,CAAC;IAAA;IAAjEC,gBAAgB;IAAEC,mBAAmB;;EAE5C;EACA;EACA,iBAAoC,IAAAF,eAAQ,EAAU,KAAK,CAAC;IAAA;IAArDG,UAAU;IAAEC,aAAa;EAEhC,IAAMC,UAAU,GAAG,SAAbA,UAAU,GAAS;IACrB,IAAI,CAACN,OAAO,EAAE;MACV,oBAAO,6BAAC,cAAM,OAAG;IACrB;IAEA,IAAIA,OAAO,CAACO,MAAM,GAAG,CAAC,EAAE;MACpB,oBACI,yEACI,6BAAC,UAAI;QACD,IAAI,EAAEhB,IAAK;QACX,OAAO,EAAES,OAAQ;QACjB,aAAa,EAAEH,aAAc;QAC7B,eAAe,EAAEJ,eAAgB;QACjC,eAAe,EAAEC,eAAgB;QACjC,aAAa,EAAEC,aAAc;QAC7B,WAAW,EAAE;UAAA,OAAMU,aAAa,CAAC,IAAI,CAAC;QAAA,CAAC;QACvC,SAAS,EAAE;UAAA,OAAMA,aAAa,CAAC,KAAK,CAAC;QAAA;MAAC,EACxC,EACDT,YAAY,iBAAI,6BAAC,0BAAY;QAAC,OAAO,EAAE;UAAA,OAAMO,mBAAmB,CAAC,IAAI,CAAC;QAAA;MAAC,EAAG,CAC5E;IAEX;IAEA,oBACI,yEACI,6BAAC,YAAK,OAAG,eACT,6BAAC,0BAAY;MAAC,OAAO,EAAE;QAAA,OAAMA,mBAAmB,CAAC,IAAI,CAAC;MAAA;IAAC,EAAG,CAC3D;EAEX,CAAC;EAED,oBACI,6BAAC,iBAAS,qBACN,6BAAC,YAAK;IAAC,KAAK,EAAEX,KAAM;IAAC,OAAO,EAAEM,YAAa;IAAC,UAAU,EAAEM;EAAW,EAAG,EACrEE,UAAU,EAAE,EACZV,YAAY,iBACT,6BAAC,oBAAkB;IACf,IAAI,EAAEL,IAAK;IACX,IAAI,EAAEW,gBAAiB;IACvB,OAAO,EAAE;MAAA,OAAMC,mBAAmB,CAAC,KAAK,CAAC;IAAA,CAAC;IAC1C,eAAe,EAAEK;EAAU,EAElC,CACO;AAEpB,CAAC;AAAC"}
@@ -1,4 +1,7 @@
1
1
  /// <reference types="react" />
2
- /// <reference types="web" />
3
2
  /// <reference types="react" />
4
- export declare const Container: import("@emotion/styled-base").StyledComponent<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, Pick<import("react").ClassAttributes<HTMLDivElement> & import("react").HTMLAttributes<HTMLDivElement>, keyof import("react").HTMLAttributes<HTMLDivElement>>, object>;
3
+ /// <reference types="web" />
4
+ export declare const Container: import("@emotion/styled").StyledComponent<{
5
+ theme?: import("@emotion/react").Theme | undefined;
6
+ as?: import("react").ElementType<any> | undefined;
7
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
@@ -9,5 +9,5 @@ var _styled = _interopRequireDefault(require("@emotion/styled"));
9
9
  var Container = /*#__PURE__*/(0, _styled.default)("div", {
10
10
  label: "Container",
11
11
  target: "ee41tcw0"
12
- })("position:relative;margin:0 0 32px;& .treeRoot{box-sizing:border-box;padding:36px 0 0;min-width:200px;}& .dropTarget{background:var(--mdc-theme-background);}& .draggingSource{opacity:0.5;}& .placeholderContainer{position:relative;}");
12
+ })("position:relative;margin:0;& .treeRoot{box-sizing:border-box;padding:36px 0 0;min-width:200px;}& .dropTarget{background:var(--mdc-theme-on-background);}& .draggingSource{opacity:0.5;}& .placeholderContainer{position:relative;}");
13
13
  exports.Container = Container;
@@ -1 +1 @@
1
- {"version":3,"names":["Container","styled"],"sources":["styled.tsx"],"sourcesContent":["import styled from \"@emotion/styled\";\n\nexport const Container = styled(\"div\")`\n position: relative;\n margin: 0 0 32px;\n\n & .treeRoot {\n box-sizing: border-box;\n padding: 36px 0 0;\n min-width: 200px;\n }\n\n & .dropTarget {\n background: var(--mdc-theme-background);\n }\n\n & .draggingSource {\n opacity: 0.5;\n }\n\n & .placeholderContainer {\n position: relative;\n }\n`;\n"],"mappings":";;;;;;;AAAA;AAEO,IAAMA,SAAS,oBAAGC,eAAM,EAAC,KAAK;EAAA;EAAA;AAAA,4OAqBpC;AAAC"}
1
+ {"version":3,"names":["Container","styled"],"sources":["styled.tsx"],"sourcesContent":["import styled from \"@emotion/styled\";\n\nexport const Container = styled(\"div\")`\n position: relative;\n margin: 0;\n\n & .treeRoot {\n box-sizing: border-box;\n padding: 36px 0 0;\n min-width: 200px;\n }\n\n & .dropTarget {\n background: var(--mdc-theme-on-background);\n }\n\n & .draggingSource {\n opacity: 0.5;\n }\n\n & .placeholderContainer {\n position: relative;\n }\n`;\n"],"mappings":";;;;;;;AAAA;AAEO,IAAMA,SAAS,oBAAGC,eAAM,EAAC,KAAK;EAAA;EAAA;AAAA,wOAqBpC;AAAC"}
@@ -160,7 +160,7 @@ var FoldersProvider = function FoldersProvider(_ref) {
160
160
  throw new Error((error === null || error === void 0 ? void 0 : error.message) || "Could not create folder");
161
161
  case 10:
162
162
  setFolders(function (folders) {
163
- return (0, _objectSpread6.default)((0, _objectSpread6.default)({}, folders), {}, (0, _defineProperty2.default)({}, type, [].concat((0, _toConsumableArray2.default)(folders[type]), [data])));
163
+ return (0, _objectSpread6.default)((0, _objectSpread6.default)({}, folders), {}, (0, _defineProperty2.default)({}, type, [data].concat((0, _toConsumableArray2.default)(folders[type]))));
164
164
  });
165
165
  return _context3.abrupt("return", data);
166
166
  case 12:
@@ -1 +1 @@
1
- {"version":3,"names":["FoldersContext","React","createContext","undefined","defaultLoading","INIT","LIST","LIST_MORE","GET","CREATE","UPDATE","DELETE","FoldersProvider","children","client","useApolloClient","useState","Object","create","folders","setFolders","loading","setLoading","context","listFolders","type","Error","apolloFetchingHandler","loadingHandler","query","LIST_FOLDERS","variables","response","data","aco","error","message","prev","getFolder","id","GET_FOLDER","createFolder","folder","mutate","mutation","CREATE_FOLDER","updateFolder","title","slug","parentId","UPDATE_FOLDER","folderIndex","findIndex","f","typeFolders","deleteFolder","DELETE_FOLDER","updatedFolders","filter"],"sources":["folders.tsx"],"sourcesContent":["import React, { ReactNode, useState } from \"react\";\nimport { useApolloClient } from \"@apollo/react-hooks\";\n\nimport { apolloFetchingHandler, loadingHandler } from \"~/handlers\";\n\nimport {\n CREATE_FOLDER,\n DELETE_FOLDER,\n GET_FOLDER,\n LIST_FOLDERS,\n UPDATE_FOLDER\n} from \"~/graphql/folders.gql\";\n\nimport {\n CreateFolderResponse,\n CreateFolderVariables,\n GetFolderResponse,\n GetFolderQueryVariables,\n DeleteFolderResponse,\n DeleteFolderVariables,\n FolderItem,\n ListFoldersQueryVariables,\n ListFoldersResponse,\n UpdateFolderResponse,\n UpdateFolderVariables,\n Loading,\n LoadingActions\n} from \"~/types\";\n\ninterface FoldersContext {\n folders: Record<string, FolderItem[]>;\n loading: Loading<LoadingActions>;\n listFolders: (type: string) => Promise<FolderItem[]>;\n getFolder: (id: string) => Promise<FolderItem>;\n createFolder: (folder: Omit<FolderItem, \"id\">) => Promise<FolderItem>;\n updateFolder: (folder: FolderItem) => Promise<FolderItem>;\n deleteFolder(folder: FolderItem): Promise<true>;\n}\n\nexport const FoldersContext = React.createContext<FoldersContext | undefined>(undefined);\n\ninterface Props {\n children: ReactNode;\n}\n\nconst defaultLoading: Record<LoadingActions, boolean> = {\n INIT: true,\n LIST: false,\n LIST_MORE: false,\n GET: false,\n CREATE: false,\n UPDATE: false,\n DELETE: false\n};\n\nexport const FoldersProvider = ({ children }: Props) => {\n const client = useApolloClient();\n const [folders, setFolders] = useState<Record<string, FolderItem[]>>(Object.create(null));\n const [loading, setLoading] = useState<Loading<LoadingActions>>(defaultLoading);\n\n const context: FoldersContext = {\n folders,\n loading,\n async listFolders(type: string) {\n if (!type) {\n throw new Error(\"Folder `type` is mandatory\");\n }\n\n const { data: response } = await apolloFetchingHandler(\n loadingHandler(\"LIST\", setLoading),\n () =>\n client.query<ListFoldersResponse, ListFoldersQueryVariables>({\n query: LIST_FOLDERS,\n variables: { type }\n })\n );\n\n const { data, error } = response.aco.listFolders;\n\n if (!data) {\n throw new Error(error?.message || \"Could not fetch folders\");\n }\n\n setFolders(folders => ({\n ...folders,\n [type]: data || []\n }));\n\n setLoading(prev => ({\n ...prev,\n INIT: false\n }));\n\n return data;\n },\n\n async getFolder(id) {\n if (!id) {\n throw new Error(\"Folder `id` is mandatory\");\n }\n\n const { data: response } = await apolloFetchingHandler(\n loadingHandler(\"GET\", setLoading),\n () =>\n client.query<GetFolderResponse, GetFolderQueryVariables>({\n query: GET_FOLDER,\n variables: { id }\n })\n );\n\n const { data, error } = response.aco.getFolder;\n\n if (!data) {\n throw new Error(error?.message || `Could not fetch folder with id: ${id}`);\n }\n\n return data;\n },\n\n async createFolder(folder) {\n const { type } = folder;\n\n const { data: response } = await apolloFetchingHandler(\n loadingHandler(\"CREATE\", setLoading),\n () =>\n client.mutate<CreateFolderResponse, CreateFolderVariables>({\n mutation: CREATE_FOLDER,\n variables: { data: folder }\n })\n );\n\n if (!response) {\n throw new Error(\"Network error while creating folder\");\n }\n\n const { data, error } = response.aco.createFolder;\n\n if (!data) {\n throw new Error(error?.message || \"Could not create folder\");\n }\n\n setFolders(folders => ({ ...folders, [type]: [...folders[type], data] }));\n\n return data;\n },\n\n async updateFolder(folder) {\n const { id, type, title, slug, parentId } = folder;\n\n const { data: response } = await apolloFetchingHandler(\n loadingHandler(\"UPDATE\", setLoading),\n () =>\n client.mutate<UpdateFolderResponse, UpdateFolderVariables>({\n mutation: UPDATE_FOLDER,\n variables: {\n id,\n data: {\n title,\n slug,\n parentId\n }\n }\n })\n );\n\n if (!response) {\n throw new Error(\"Network error while updating folder\");\n }\n\n const { data, error } = response.aco.updateFolder;\n\n if (!data) {\n throw new Error(error?.message || \"Could not update folder\");\n }\n\n setFolders(folders => {\n const folderIndex = folders[type].findIndex(f => f.id === id);\n if (folderIndex === -1) {\n return folders;\n }\n\n const typeFolders = folders[type];\n typeFolders[folderIndex] = data;\n\n return { ...folders, [type]: typeFolders };\n });\n\n return data;\n },\n\n async deleteFolder(folder) {\n const { id, type } = folder;\n\n const { data: response } = await apolloFetchingHandler(\n loadingHandler(\"DELETE\", setLoading),\n () =>\n client.mutate<DeleteFolderResponse, DeleteFolderVariables>({\n mutation: DELETE_FOLDER,\n variables: { id }\n })\n );\n\n if (!response) {\n throw new Error(\"Network error while deleting folder\");\n }\n\n const { data, error } = response.aco.deleteFolder;\n\n if (!data) {\n throw new Error(error?.message || \"Could not delete folder\");\n }\n\n setFolders(folders => {\n const updatedFolders = folders[type].filter(f => f.id !== id);\n return { ...folders, [type]: updatedFolders };\n });\n\n return true;\n }\n };\n\n return <FoldersContext.Provider value={context}>{children}</FoldersContext.Provider>;\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["FoldersContext","React","createContext","undefined","defaultLoading","INIT","LIST","LIST_MORE","GET","CREATE","UPDATE","DELETE","FoldersProvider","children","client","useApolloClient","useState","Object","create","folders","setFolders","loading","setLoading","context","listFolders","type","Error","apolloFetchingHandler","loadingHandler","query","LIST_FOLDERS","variables","response","data","aco","error","message","prev","getFolder","id","GET_FOLDER","createFolder","folder","mutate","mutation","CREATE_FOLDER","updateFolder","title","slug","parentId","UPDATE_FOLDER","folderIndex","findIndex","f","typeFolders","deleteFolder","DELETE_FOLDER","updatedFolders","filter"],"sources":["folders.tsx"],"sourcesContent":["import React, { ReactNode, useState } from \"react\";\nimport { useApolloClient } from \"@apollo/react-hooks\";\n\nimport { apolloFetchingHandler, loadingHandler } from \"~/handlers\";\n\nimport {\n CREATE_FOLDER,\n DELETE_FOLDER,\n GET_FOLDER,\n LIST_FOLDERS,\n UPDATE_FOLDER\n} from \"~/graphql/folders.gql\";\n\nimport {\n CreateFolderResponse,\n CreateFolderVariables,\n GetFolderResponse,\n GetFolderQueryVariables,\n DeleteFolderResponse,\n DeleteFolderVariables,\n FolderItem,\n ListFoldersQueryVariables,\n ListFoldersResponse,\n UpdateFolderResponse,\n UpdateFolderVariables,\n Loading,\n LoadingActions\n} from \"~/types\";\n\ninterface FoldersContext {\n folders: Record<string, FolderItem[]>;\n loading: Loading<LoadingActions>;\n listFolders: (type: string) => Promise<FolderItem[]>;\n getFolder: (id: string) => Promise<FolderItem>;\n createFolder: (folder: Omit<FolderItem, \"id\">) => Promise<FolderItem>;\n updateFolder: (folder: FolderItem) => Promise<FolderItem>;\n deleteFolder(folder: FolderItem): Promise<true>;\n}\n\nexport const FoldersContext = React.createContext<FoldersContext | undefined>(undefined);\n\ninterface Props {\n children: ReactNode;\n}\n\nconst defaultLoading: Record<LoadingActions, boolean> = {\n INIT: true,\n LIST: false,\n LIST_MORE: false,\n GET: false,\n CREATE: false,\n UPDATE: false,\n DELETE: false\n};\n\nexport const FoldersProvider = ({ children }: Props) => {\n const client = useApolloClient();\n const [folders, setFolders] = useState<Record<string, FolderItem[]>>(Object.create(null));\n const [loading, setLoading] = useState<Loading<LoadingActions>>(defaultLoading);\n\n const context: FoldersContext = {\n folders,\n loading,\n async listFolders(type: string) {\n if (!type) {\n throw new Error(\"Folder `type` is mandatory\");\n }\n\n const { data: response } = await apolloFetchingHandler(\n loadingHandler(\"LIST\", setLoading),\n () =>\n client.query<ListFoldersResponse, ListFoldersQueryVariables>({\n query: LIST_FOLDERS,\n variables: { type }\n })\n );\n\n const { data, error } = response.aco.listFolders;\n\n if (!data) {\n throw new Error(error?.message || \"Could not fetch folders\");\n }\n\n setFolders(folders => ({\n ...folders,\n [type]: data || []\n }));\n\n setLoading(prev => ({\n ...prev,\n INIT: false\n }));\n\n return data;\n },\n\n async getFolder(id) {\n if (!id) {\n throw new Error(\"Folder `id` is mandatory\");\n }\n\n const { data: response } = await apolloFetchingHandler(\n loadingHandler(\"GET\", setLoading),\n () =>\n client.query<GetFolderResponse, GetFolderQueryVariables>({\n query: GET_FOLDER,\n variables: { id }\n })\n );\n\n const { data, error } = response.aco.getFolder;\n\n if (!data) {\n throw new Error(error?.message || `Could not fetch folder with id: ${id}`);\n }\n\n return data;\n },\n\n async createFolder(folder) {\n const { type } = folder;\n\n const { data: response } = await apolloFetchingHandler(\n loadingHandler(\"CREATE\", setLoading),\n () =>\n client.mutate<CreateFolderResponse, CreateFolderVariables>({\n mutation: CREATE_FOLDER,\n variables: { data: folder }\n })\n );\n\n if (!response) {\n throw new Error(\"Network error while creating folder\");\n }\n\n const { data, error } = response.aco.createFolder;\n\n if (!data) {\n throw new Error(error?.message || \"Could not create folder\");\n }\n\n setFolders(folders => ({ ...folders, [type]: [data, ...folders[type]] }));\n\n return data;\n },\n\n async updateFolder(folder) {\n const { id, type, title, slug, parentId } = folder;\n\n const { data: response } = await apolloFetchingHandler(\n loadingHandler(\"UPDATE\", setLoading),\n () =>\n client.mutate<UpdateFolderResponse, UpdateFolderVariables>({\n mutation: UPDATE_FOLDER,\n variables: {\n id,\n data: {\n title,\n slug,\n parentId\n }\n }\n })\n );\n\n if (!response) {\n throw new Error(\"Network error while updating folder\");\n }\n\n const { data, error } = response.aco.updateFolder;\n\n if (!data) {\n throw new Error(error?.message || \"Could not update folder\");\n }\n\n setFolders(folders => {\n const folderIndex = folders[type].findIndex(f => f.id === id);\n if (folderIndex === -1) {\n return folders;\n }\n\n const typeFolders = folders[type];\n typeFolders[folderIndex] = data;\n\n return { ...folders, [type]: typeFolders };\n });\n\n return data;\n },\n\n async deleteFolder(folder) {\n const { id, type } = folder;\n\n const { data: response } = await apolloFetchingHandler(\n loadingHandler(\"DELETE\", setLoading),\n () =>\n client.mutate<DeleteFolderResponse, DeleteFolderVariables>({\n mutation: DELETE_FOLDER,\n variables: { id }\n })\n );\n\n if (!response) {\n throw new Error(\"Network error while deleting folder\");\n }\n\n const { data, error } = response.aco.deleteFolder;\n\n if (!data) {\n throw new Error(error?.message || \"Could not delete folder\");\n }\n\n setFolders(folders => {\n const updatedFolders = folders[type].filter(f => f.id !== id);\n return { ...folders, [type]: updatedFolders };\n });\n\n return true;\n }\n };\n\n return <FoldersContext.Provider value={context}>{children}</FoldersContext.Provider>;\n};\n"],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import React, { ReactNode } from "react";
2
+ import { LinkItem, ListMeta, Loading, LoadingActions, Meta } from "../types";
3
+ interface LinksContext {
4
+ links: LinkItem[];
5
+ loading: Loading<LoadingActions>;
6
+ meta: Meta<ListMeta>;
7
+ listLinks: (type: string, limit?: number, after?: string) => Promise<LinkItem[]>;
8
+ getLink: (id: string, folderId: string) => Promise<LinkItem>;
9
+ createLink: (link: Omit<LinkItem, "linkId">) => Promise<LinkItem>;
10
+ updateLink: (link: LinkItem, contextFolderId: string) => Promise<LinkItem>;
11
+ deleteLink(link: LinkItem): Promise<true>;
12
+ }
13
+ export declare const LinksContext: React.Context<LinksContext | undefined>;
14
+ interface Props {
15
+ children: ReactNode;
16
+ }
17
+ export declare const LinksProvider: ({ children }: Props) => JSX.Element;
18
+ export {};
@@ -0,0 +1,371 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+
5
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.LinksProvider = exports.LinksContext = void 0;
11
+
12
+ var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
13
+
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
+
16
+ var _objectSpread5 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
17
+
18
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
19
+
20
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
21
+
22
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
23
+
24
+ var _react = _interopRequireWildcard(require("react"));
25
+
26
+ var _reactHooks = require("@apollo/react-hooks");
27
+
28
+ var _handlers = require("../handlers");
29
+
30
+ var _links = require("../graphql/links.gql");
31
+
32
+ var LinksContext = /*#__PURE__*/_react.default.createContext(undefined);
33
+
34
+ exports.LinksContext = LinksContext;
35
+ var defaultLoading = {
36
+ INIT: true,
37
+ LIST: false,
38
+ LIST_MORE: false,
39
+ GET: false,
40
+ CREATE: false,
41
+ UPDATE: false,
42
+ DELETE: false
43
+ };
44
+
45
+ var LinksProvider = function LinksProvider(_ref) {
46
+ var children = _ref.children;
47
+ var client = (0, _reactHooks.useApolloClient)();
48
+
49
+ var _useState = (0, _react.useState)([]),
50
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
51
+ links = _useState2[0],
52
+ setLinks = _useState2[1];
53
+
54
+ var _useState3 = (0, _react.useState)(defaultLoading),
55
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
56
+ loading = _useState4[0],
57
+ setLoading = _useState4[1];
58
+
59
+ var _useState5 = (0, _react.useState)(Object.create(null)),
60
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
61
+ meta = _useState6[0],
62
+ setMeta = _useState6[1];
63
+
64
+ var context = {
65
+ links: links,
66
+ loading: loading,
67
+ meta: meta,
68
+ listLinks: function listLinks(folderId) {
69
+ var _arguments = arguments;
70
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee() {
71
+ var limit, after, action, _yield$apolloFetching, response, _response$folders$lis, data, responseMeta, error;
72
+
73
+ return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
74
+ while (1) {
75
+ switch (_context.prev = _context.next) {
76
+ case 0:
77
+ limit = _arguments.length > 1 && _arguments[1] !== undefined ? _arguments[1] : 10;
78
+ after = _arguments.length > 2 ? _arguments[2] : undefined;
79
+
80
+ if (folderId) {
81
+ _context.next = 4;
82
+ break;
83
+ }
84
+
85
+ throw new Error("Link `folderId` is mandatory");
86
+
87
+ case 4:
88
+ action = after ? "LIST_MORE" : "LIST";
89
+ _context.next = 7;
90
+ return (0, _handlers.apolloFetchingHandler)((0, _handlers.loadingHandler)(action, setLoading), function () {
91
+ return client.query({
92
+ query: _links.LIST_LINKS,
93
+ variables: {
94
+ folderId: folderId,
95
+ limit: limit,
96
+ after: after
97
+ }
98
+ });
99
+ });
100
+
101
+ case 7:
102
+ _yield$apolloFetching = _context.sent;
103
+ response = _yield$apolloFetching.data;
104
+ _response$folders$lis = response.folders.listLinks, data = _response$folders$lis.data, responseMeta = _response$folders$lis.meta, error = _response$folders$lis.error;
105
+
106
+ if (!(!data || !responseMeta)) {
107
+ _context.next = 12;
108
+ break;
109
+ }
110
+
111
+ throw new Error((error === null || error === void 0 ? void 0 : error.message) || "Could not fetch links");
112
+
113
+ case 12:
114
+ setLinks(function (links) {
115
+ return (0, _toConsumableArray2.default)(new Set([].concat((0, _toConsumableArray2.default)(links), (0, _toConsumableArray2.default)(data))));
116
+ });
117
+ setMeta(function (meta) {
118
+ return (0, _objectSpread5.default)((0, _objectSpread5.default)({}, meta), {}, (0, _defineProperty2.default)({}, folderId, responseMeta));
119
+ });
120
+ setLoading(function (prev) {
121
+ return (0, _objectSpread5.default)((0, _objectSpread5.default)({}, prev), {}, {
122
+ INIT: false
123
+ });
124
+ });
125
+ return _context.abrupt("return", data);
126
+
127
+ case 16:
128
+ case "end":
129
+ return _context.stop();
130
+ }
131
+ }
132
+ }, _callee);
133
+ }))();
134
+ },
135
+ getLink: function getLink(id) {
136
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee2() {
137
+ var _yield$apolloFetching2, response, _response$folders$get, data, error;
138
+
139
+ return (0, _regeneratorRuntime2.default)().wrap(function _callee2$(_context2) {
140
+ while (1) {
141
+ switch (_context2.prev = _context2.next) {
142
+ case 0:
143
+ if (id) {
144
+ _context2.next = 2;
145
+ break;
146
+ }
147
+
148
+ throw new Error("Link `id` is mandatory");
149
+
150
+ case 2:
151
+ _context2.next = 4;
152
+ return (0, _handlers.apolloFetchingHandler)((0, _handlers.loadingHandler)("GET", setLoading), function () {
153
+ return client.query({
154
+ query: _links.GET_LINK,
155
+ variables: {
156
+ id: id
157
+ }
158
+ });
159
+ });
160
+
161
+ case 4:
162
+ _yield$apolloFetching2 = _context2.sent;
163
+ response = _yield$apolloFetching2.data;
164
+ _response$folders$get = response.folders.getLink, data = _response$folders$get.data, error = _response$folders$get.error;
165
+
166
+ if (data) {
167
+ _context2.next = 9;
168
+ break;
169
+ }
170
+
171
+ throw new Error((error === null || error === void 0 ? void 0 : error.message) || "Could not fetch link with id: ".concat(id));
172
+
173
+ case 9:
174
+ return _context2.abrupt("return", data);
175
+
176
+ case 10:
177
+ case "end":
178
+ return _context2.stop();
179
+ }
180
+ }
181
+ }, _callee2);
182
+ }))();
183
+ },
184
+ createLink: function createLink(link) {
185
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee3() {
186
+ var folderId, _yield$apolloFetching3, response, _response$folders$cre, data, error;
187
+
188
+ return (0, _regeneratorRuntime2.default)().wrap(function _callee3$(_context3) {
189
+ while (1) {
190
+ switch (_context3.prev = _context3.next) {
191
+ case 0:
192
+ folderId = link.folderId;
193
+ _context3.next = 3;
194
+ return (0, _handlers.apolloFetchingHandler)((0, _handlers.loadingHandler)("CREATE", setLoading), function () {
195
+ return client.mutate({
196
+ mutation: _links.CREATE_LINK,
197
+ variables: {
198
+ data: link
199
+ }
200
+ });
201
+ });
202
+
203
+ case 3:
204
+ _yield$apolloFetching3 = _context3.sent;
205
+ response = _yield$apolloFetching3.data;
206
+
207
+ if (response) {
208
+ _context3.next = 7;
209
+ break;
210
+ }
211
+
212
+ throw new Error("Network error while creating link");
213
+
214
+ case 7:
215
+ _response$folders$cre = response.folders.createLink, data = _response$folders$cre.data, error = _response$folders$cre.error;
216
+
217
+ if (data) {
218
+ _context3.next = 10;
219
+ break;
220
+ }
221
+
222
+ throw new Error((error === null || error === void 0 ? void 0 : error.message) || "Could not create link");
223
+
224
+ case 10:
225
+ setLinks(function (links) {
226
+ return [].concat((0, _toConsumableArray2.default)(links), [data]);
227
+ });
228
+ setMeta(function (meta) {
229
+ return (0, _objectSpread5.default)((0, _objectSpread5.default)({}, meta), {}, (0, _defineProperty2.default)({}, folderId, (0, _objectSpread5.default)((0, _objectSpread5.default)({}, meta[folderId]), {}, {
230
+ totalCount: ++meta[folderId].totalCount
231
+ })));
232
+ });
233
+ return _context3.abrupt("return", data);
234
+
235
+ case 13:
236
+ case "end":
237
+ return _context3.stop();
238
+ }
239
+ }
240
+ }, _callee3);
241
+ }))();
242
+ },
243
+ updateLink: function updateLink(link, contextFolderId) {
244
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee4() {
245
+ var id, folderId, _yield$apolloFetching4, response, _response$folders$upd, data, error;
246
+
247
+ return (0, _regeneratorRuntime2.default)().wrap(function _callee4$(_context4) {
248
+ while (1) {
249
+ switch (_context4.prev = _context4.next) {
250
+ case 0:
251
+ id = link.id, folderId = link.folderId;
252
+ _context4.next = 3;
253
+ return (0, _handlers.apolloFetchingHandler)((0, _handlers.loadingHandler)("UPDATE", setLoading), function () {
254
+ return client.mutate({
255
+ mutation: _links.UPDATE_LINK,
256
+ variables: {
257
+ id: id,
258
+ data: {
259
+ folderId: folderId
260
+ }
261
+ }
262
+ });
263
+ });
264
+
265
+ case 3:
266
+ _yield$apolloFetching4 = _context4.sent;
267
+ response = _yield$apolloFetching4.data;
268
+
269
+ if (response) {
270
+ _context4.next = 7;
271
+ break;
272
+ }
273
+
274
+ throw new Error("Network error while updating link");
275
+
276
+ case 7:
277
+ _response$folders$upd = response.folders.updateLink, data = _response$folders$upd.data, error = _response$folders$upd.error;
278
+
279
+ if (data) {
280
+ _context4.next = 10;
281
+ break;
282
+ }
283
+
284
+ throw new Error((error === null || error === void 0 ? void 0 : error.message) || "Could not update link");
285
+
286
+ case 10:
287
+ setLinks(function (links) {
288
+ return links.map(function (link) {
289
+ return link.id === id ? data : link;
290
+ }).filter(function (link) {
291
+ return link.folderId === contextFolderId;
292
+ });
293
+ });
294
+ return _context4.abrupt("return", data);
295
+
296
+ case 12:
297
+ case "end":
298
+ return _context4.stop();
299
+ }
300
+ }
301
+ }, _callee4);
302
+ }))();
303
+ },
304
+ deleteLink: function deleteLink(link) {
305
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee5() {
306
+ var id, folderId, _yield$apolloFetching5, response, _response$folders$del, data, error;
307
+
308
+ return (0, _regeneratorRuntime2.default)().wrap(function _callee5$(_context5) {
309
+ while (1) {
310
+ switch (_context5.prev = _context5.next) {
311
+ case 0:
312
+ id = link.id, folderId = link.folderId;
313
+ _context5.next = 3;
314
+ return (0, _handlers.apolloFetchingHandler)((0, _handlers.loadingHandler)("DELETE", setLoading), function () {
315
+ return client.mutate({
316
+ mutation: _links.DELETE_LINK,
317
+ variables: {
318
+ id: id
319
+ }
320
+ });
321
+ });
322
+
323
+ case 3:
324
+ _yield$apolloFetching5 = _context5.sent;
325
+ response = _yield$apolloFetching5.data;
326
+
327
+ if (response) {
328
+ _context5.next = 7;
329
+ break;
330
+ }
331
+
332
+ throw new Error("Network error while deleting link");
333
+
334
+ case 7:
335
+ _response$folders$del = response.folders.deleteLink, data = _response$folders$del.data, error = _response$folders$del.error;
336
+
337
+ if (data) {
338
+ _context5.next = 10;
339
+ break;
340
+ }
341
+
342
+ throw new Error((error === null || error === void 0 ? void 0 : error.message) || "Could not delete link");
343
+
344
+ case 10:
345
+ setLinks(function (links) {
346
+ return links.filter(function (link) {
347
+ return link.id !== id;
348
+ });
349
+ });
350
+ setMeta(function (meta) {
351
+ return (0, _objectSpread5.default)((0, _objectSpread5.default)({}, meta), {}, (0, _defineProperty2.default)({}, folderId, (0, _objectSpread5.default)((0, _objectSpread5.default)({}, meta[folderId]), {}, {
352
+ totalCount: --meta[folderId].totalCount
353
+ })));
354
+ });
355
+ return _context5.abrupt("return", true);
356
+
357
+ case 13:
358
+ case "end":
359
+ return _context5.stop();
360
+ }
361
+ }
362
+ }, _callee5);
363
+ }))();
364
+ }
365
+ };
366
+ return /*#__PURE__*/_react.default.createElement(LinksContext.Provider, {
367
+ value: context
368
+ }, children);
369
+ };
370
+
371
+ exports.LinksProvider = LinksProvider;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["LinksContext","React","createContext","undefined","defaultLoading","INIT","LIST","LIST_MORE","GET","CREATE","UPDATE","DELETE","LinksProvider","children","client","useApolloClient","useState","links","setLinks","loading","setLoading","Object","create","meta","setMeta","context","listLinks","folderId","limit","after","Error","action","apolloFetchingHandler","loadingHandler","query","LIST_LINKS","variables","response","data","folders","responseMeta","error","message","Set","prev","getLink","id","GET_LINK","createLink","link","mutate","mutation","CREATE_LINK","totalCount","updateLink","contextFolderId","UPDATE_LINK","map","filter","deleteLink","DELETE_LINK"],"sources":["links.tsx"],"sourcesContent":["import React, { ReactNode, useState } from \"react\";\nimport { useApolloClient } from \"@apollo/react-hooks\";\n\nimport { apolloFetchingHandler, loadingHandler } from \"~/handlers\";\n\nimport { CREATE_LINK, DELETE_LINK, GET_LINK, LIST_LINKS, UPDATE_LINK } from \"~/graphql/links.gql\";\n\nimport {\n CreateLinkResponse,\n CreateLinkVariables,\n DeleteLinkResponse,\n DeleteLinkVariables,\n GetLinkQueryVariables,\n GetLinkResponse,\n LinkItem,\n ListLinksQueryVariables,\n ListLinksResponse,\n ListMeta,\n Loading,\n LoadingActions,\n Meta,\n UpdateLinkResponse,\n UpdateLinkVariables\n} from \"~/types\";\n\ninterface LinksContext {\n links: LinkItem[];\n loading: Loading<LoadingActions>;\n meta: Meta<ListMeta>;\n listLinks: (type: string, limit?: number, after?: string) => Promise<LinkItem[]>;\n getLink: (id: string, folderId: string) => Promise<LinkItem>;\n createLink: (link: Omit<LinkItem, \"linkId\">) => Promise<LinkItem>;\n updateLink: (link: LinkItem, contextFolderId: string) => Promise<LinkItem>;\n deleteLink(link: LinkItem): Promise<true>;\n}\n\nexport const LinksContext = React.createContext<LinksContext | undefined>(undefined);\n\ninterface Props {\n children: ReactNode;\n}\n\nconst defaultLoading: Record<LoadingActions, boolean> = {\n INIT: true,\n LIST: false,\n LIST_MORE: false,\n GET: false,\n CREATE: false,\n UPDATE: false,\n DELETE: false\n};\n\nexport const LinksProvider = ({ children }: Props) => {\n const client = useApolloClient();\n const [links, setLinks] = useState<LinkItem[]>([]);\n const [loading, setLoading] = useState<Loading<LoadingActions>>(defaultLoading);\n const [meta, setMeta] = useState<Meta<ListMeta>>(Object.create(null));\n\n const context: LinksContext = {\n links,\n loading,\n meta,\n async listLinks(folderId: string, limit = 10, after?: string) {\n if (!folderId) {\n throw new Error(\"Link `folderId` is mandatory\");\n }\n\n const action = after ? \"LIST_MORE\" : \"LIST\";\n\n const { data: response } = await apolloFetchingHandler(\n loadingHandler(action, setLoading),\n () =>\n client.query<ListLinksResponse, ListLinksQueryVariables>({\n query: LIST_LINKS,\n variables: { folderId, limit, after }\n })\n );\n\n const { data, meta: responseMeta, error } = response.folders.listLinks;\n\n if (!data || !responseMeta) {\n throw new Error(error?.message || \"Could not fetch links\");\n }\n\n setLinks(links => [...new Set([...links, ...data])]);\n\n setMeta(meta => ({\n ...meta,\n [folderId]: responseMeta\n }));\n\n setLoading(prev => {\n return {\n ...prev,\n INIT: false\n };\n });\n\n return data;\n },\n\n async getLink(id) {\n if (!id) {\n throw new Error(\"Link `id` is mandatory\");\n }\n\n const { data: response } = await apolloFetchingHandler(\n loadingHandler(\"GET\", setLoading),\n () =>\n client.query<GetLinkResponse, GetLinkQueryVariables>({\n query: GET_LINK,\n variables: { id }\n })\n );\n\n const { data, error } = response.folders.getLink;\n\n if (!data) {\n throw new Error(error?.message || `Could not fetch link with id: ${id}`);\n }\n\n return data;\n },\n\n async createLink(link) {\n const { folderId } = link;\n\n const { data: response } = await apolloFetchingHandler(\n loadingHandler(\"CREATE\", setLoading),\n () =>\n client.mutate<CreateLinkResponse, CreateLinkVariables>({\n mutation: CREATE_LINK,\n variables: { data: link }\n })\n );\n\n if (!response) {\n throw new Error(\"Network error while creating link\");\n }\n\n const { data, error } = response.folders.createLink;\n\n if (!data) {\n throw new Error(error?.message || \"Could not create link\");\n }\n\n setLinks(links => [...links, data]);\n\n setMeta(meta => ({\n ...meta,\n [folderId]: {\n ...meta[folderId],\n totalCount: ++meta[folderId].totalCount\n }\n }));\n\n return data;\n },\n\n async updateLink(link, contextFolderId) {\n const { id, folderId } = link;\n\n const { data: response } = await apolloFetchingHandler(\n loadingHandler(\"UPDATE\", setLoading),\n () =>\n client.mutate<UpdateLinkResponse, UpdateLinkVariables>({\n mutation: UPDATE_LINK,\n variables: { id, data: { folderId } }\n })\n );\n\n if (!response) {\n throw new Error(\"Network error while updating link\");\n }\n\n const { data, error } = response.folders.updateLink;\n\n if (!data) {\n throw new Error(error?.message || \"Could not update link\");\n }\n\n setLinks(links =>\n links\n .map(link => (link.id === id ? data : link))\n .filter(link => link.folderId === contextFolderId)\n );\n\n return data;\n },\n\n async deleteLink(link) {\n const { id, folderId } = link;\n\n const { data: response } = await apolloFetchingHandler(\n loadingHandler(\"DELETE\", setLoading),\n () =>\n client.mutate<DeleteLinkResponse, DeleteLinkVariables>({\n mutation: DELETE_LINK,\n variables: { id }\n })\n );\n\n if (!response) {\n throw new Error(\"Network error while deleting link\");\n }\n\n const { data, error } = response.folders.deleteLink;\n\n if (!data) {\n throw new Error(error?.message || \"Could not delete link\");\n }\n\n setLinks(links => links.filter(link => link.id !== id));\n\n setMeta(meta => ({\n ...meta,\n [folderId]: {\n ...meta[folderId],\n totalCount: --meta[folderId].totalCount\n }\n }));\n\n return true;\n }\n };\n\n return <LinksContext.Provider value={context}>{children}</LinksContext.Provider>;\n};\n"],"mappings":"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"}
@@ -1,14 +1,20 @@
1
1
  import React, { ReactNode } from "react";
2
- import { SearchRecordItem, ListMeta, Loading, LoadingActions, Meta } from "../types";
2
+ import { SearchRecordItem, ListMeta, Loading, LoadingActions, Meta, ListDbSort } from "../types";
3
3
  interface SearchRecordsContext {
4
4
  records: SearchRecordItem[];
5
5
  loading: Loading<LoadingActions>;
6
6
  meta: Meta<ListMeta>;
7
- listRecords: (type: string, folderId: string, limit?: number, after?: string) => Promise<SearchRecordItem[]>;
8
- getRecord: (id: string, folderId: string) => Promise<SearchRecordItem>;
9
- createRecord: (link: Omit<SearchRecordItem, "id">) => Promise<SearchRecordItem>;
10
- updateRecord: (link: SearchRecordItem, contextFolderId: string) => Promise<SearchRecordItem>;
11
- deleteRecord(link: SearchRecordItem): Promise<true>;
7
+ listRecords: (params: {
8
+ type?: string;
9
+ folderId?: string;
10
+ limit?: number;
11
+ after?: string;
12
+ sort?: ListDbSort;
13
+ }) => Promise<SearchRecordItem[]>;
14
+ getRecord: (id: string) => Promise<SearchRecordItem>;
15
+ createRecord: (record: Omit<SearchRecordItem, "id">) => Promise<SearchRecordItem>;
16
+ updateRecord: (record: SearchRecordItem, contextFolderId?: string) => Promise<SearchRecordItem>;
17
+ deleteRecord(record: SearchRecordItem): Promise<true>;
12
18
  }
13
19
  export declare const SearchRecordsContext: React.Context<SearchRecordsContext | undefined>;
14
20
  interface Props {