sanity 6.4.0-next.21 → 6.4.0-next.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/_chunks-dts/ActiveWorkspaceMatcherContext.d.ts +1 -1
- package/lib/_chunks-es/CalendarFilter.js +3 -1
- package/lib/_chunks-es/CalendarFilter.js.map +1 -1
- package/lib/_chunks-es/CommentsInspector.js +58 -1
- package/lib/_chunks-es/CommentsInspector.js.map +1 -1
- package/lib/_chunks-es/PresentationToolGrantsCheck.js +9 -1
- package/lib/_chunks-es/PresentationToolGrantsCheck.js.map +1 -1
- package/lib/_chunks-es/ReleasesStudioLayout.js +58 -1
- package/lib/_chunks-es/ReleasesStudioLayout.js.map +1 -1
- package/lib/_chunks-es/ReleasesTool.js +68 -1
- package/lib/_chunks-es/ReleasesTool.js.map +1 -1
- package/lib/_chunks-es/StructureToolProvider.js +4 -1
- package/lib/_chunks-es/StructureToolProvider.js.map +1 -1
- package/lib/_chunks-es/Table.js +2 -1
- package/lib/_chunks-es/Table.js.map +1 -1
- package/lib/_chunks-es/TasksDocumentInputLayout.js +58 -1
- package/lib/_chunks-es/TasksDocumentInputLayout.js.map +1 -1
- package/lib/_chunks-es/TasksFooterOpenTasks.js +59 -1
- package/lib/_chunks-es/TasksFooterOpenTasks.js.map +1 -1
- package/lib/_chunks-es/TasksStudioActiveToolLayout.js +58 -1
- package/lib/_chunks-es/TasksStudioActiveToolLayout.js.map +1 -1
- package/lib/_chunks-es/TasksStudioLayout.js +58 -1
- package/lib/_chunks-es/TasksStudioLayout.js.map +1 -1
- package/lib/_chunks-es/TasksStudioNavbar.js +58 -1
- package/lib/_chunks-es/TasksStudioNavbar.js.map +1 -1
- package/lib/_chunks-es/Tool.js +7 -1
- package/lib/_chunks-es/Tool.js.map +1 -1
- package/lib/_chunks-es/VariantsStudioNavbar.js +58 -1
- package/lib/_chunks-es/VariantsStudioNavbar.js.map +1 -1
- package/lib/_chunks-es/VariantsTool.js +59 -1
- package/lib/_chunks-es/VariantsTool.js.map +1 -1
- package/lib/_chunks-es/index2.js +98 -1
- package/lib/_chunks-es/index2.js.map +1 -1
- package/lib/_chunks-es/index3.js +58 -1
- package/lib/_chunks-es/index3.js.map +1 -1
- package/lib/_chunks-es/index4.js +3 -1
- package/lib/_chunks-es/index4.js.map +1 -1
- package/lib/_chunks-es/index5.js +3 -1
- package/lib/_chunks-es/index5.js.map +1 -1
- package/lib/_chunks-es/index6.js +60 -1
- package/lib/_chunks-es/index6.js.map +1 -1
- package/lib/_chunks-es/index7.js +58 -1
- package/lib/_chunks-es/index7.js.map +1 -1
- package/lib/_chunks-es/index8.js +59 -1
- package/lib/_chunks-es/index8.js.map +1 -1
- package/lib/_chunks-es/index9.js +8 -1
- package/lib/_chunks-es/index9.js.map +1 -1
- package/lib/_chunks-es/inputResolver.js +2 -1
- package/lib/_chunks-es/inputResolver.js.map +1 -1
- package/lib/_chunks-es/presentation.js +7 -1
- package/lib/_chunks-es/presentation.js.map +1 -1
- package/lib/_chunks-es/resources2.js +58 -1
- package/lib/_chunks-es/resources2.js.map +1 -1
- package/lib/_chunks-es/resources3.js +58 -1
- package/lib/_chunks-es/resources3.js.map +1 -1
- package/lib/_chunks-es/resources4.js +58 -1
- package/lib/_chunks-es/resources4.js.map +1 -1
- package/lib/_chunks-es/resources5.js +58 -1
- package/lib/_chunks-es/resources5.js.map +1 -1
- package/lib/_chunks-es/resources6.js +58 -1
- package/lib/_chunks-es/resources6.js.map +1 -1
- package/lib/_chunks-es/resources7.js +58 -1
- package/lib/_chunks-es/resources7.js.map +1 -1
- package/lib/_chunks-es/structureTool.js +47 -1
- package/lib/_chunks-es/structureTool.js.map +1 -1
- package/lib/_chunks-es/version.js +2 -2
- package/lib/desk.js +4 -1
- package/lib/desk.js.map +1 -1
- package/lib/index.js +15 -1
- package/lib/index.js.map +1 -1
- package/lib/structure.js +3 -1
- package/lib/structure.js.map +1 -1
- package/package.json +11 -11
|
@@ -15,18 +15,23 @@ import "@sanity/client/csm";
|
|
|
15
15
|
import "quick-lru";
|
|
16
16
|
import "lodash-es/throttle.js";
|
|
17
17
|
import "lodash-es/isEqual.js";
|
|
18
|
-
import "@sanity/icons";
|
|
18
|
+
import "@sanity/icons/Document";
|
|
19
|
+
import "@sanity/icons/Image";
|
|
19
20
|
import "@sanity/uuid";
|
|
20
21
|
import "@sanity/color";
|
|
21
22
|
import "color2k";
|
|
22
23
|
import "lodash-es/isString.js";
|
|
24
|
+
import "@sanity/icons/Copy";
|
|
23
25
|
import "react-i18next";
|
|
26
|
+
import "@sanity/icons/Clipboard";
|
|
24
27
|
import "./createAgentBundlesStore.js";
|
|
25
28
|
import "@sanity/telemetry/react";
|
|
26
29
|
import "@portabletext/editor";
|
|
27
30
|
import "@sanity/util/paths";
|
|
28
31
|
import "./index.js";
|
|
29
32
|
import "@sanity/types";
|
|
33
|
+
import "@sanity/icons/ChevronRight";
|
|
34
|
+
import "@sanity/icons/Revert";
|
|
30
35
|
import "@sanity/diff-match-patch";
|
|
31
36
|
import "lodash-es/flatten.js";
|
|
32
37
|
import "lodash-es/orderBy.js";
|
|
@@ -34,6 +39,7 @@ import "lodash-es/uniq.js";
|
|
|
34
39
|
import "lodash-es/xor.js";
|
|
35
40
|
import "@sanity/diff-patch";
|
|
36
41
|
import "./version.js";
|
|
42
|
+
import "@sanity/icons/ErrorOutline";
|
|
37
43
|
import "date-fns/differenceInDays";
|
|
38
44
|
import "date-fns/differenceInHours";
|
|
39
45
|
import "date-fns/differenceInMinutes";
|
|
@@ -41,17 +47,36 @@ import "date-fns/differenceInMonths";
|
|
|
41
47
|
import "date-fns/differenceInSeconds";
|
|
42
48
|
import "date-fns/differenceInWeeks";
|
|
43
49
|
import "date-fns/differenceInYears";
|
|
50
|
+
import "@sanity/icons/AddCircle";
|
|
51
|
+
import "@sanity/icons/Calendar";
|
|
52
|
+
import "@sanity/icons/Circle";
|
|
53
|
+
import "@sanity/icons/Close";
|
|
54
|
+
import "@sanity/icons/Edit";
|
|
55
|
+
import "@sanity/icons/Publish";
|
|
56
|
+
import "@sanity/icons/Timeline";
|
|
57
|
+
import "@sanity/icons/Trash";
|
|
58
|
+
import "@sanity/icons/Unpublish";
|
|
44
59
|
import "@sanity/diff";
|
|
45
60
|
import "mendoza";
|
|
61
|
+
import "@sanity/icons/ArrowDown";
|
|
62
|
+
import "@sanity/icons/ArrowRight";
|
|
63
|
+
import "@sanity/icons/InfoOutline";
|
|
64
|
+
import "@sanity/icons/WarningOutline";
|
|
46
65
|
import "@portabletext/sanity-bridge";
|
|
47
66
|
import "@sanity/id-utils";
|
|
48
67
|
import "sanity/router";
|
|
68
|
+
import "@sanity/icons/ChevronDown";
|
|
49
69
|
import "date-fns/addHours";
|
|
50
70
|
import "date-fns/startOfHour";
|
|
71
|
+
import "@sanity/icons/Bolt";
|
|
72
|
+
import "@sanity/icons/Clock";
|
|
73
|
+
import "@sanity/icons/Dot";
|
|
74
|
+
import "@sanity/icons/EarthGlobe";
|
|
51
75
|
import "date-fns/format";
|
|
52
76
|
import "date-fns/isValid";
|
|
53
77
|
import "date-fns/parse";
|
|
54
78
|
import "@sanity/util/legacyDateFormat";
|
|
79
|
+
import "@sanity/icons/Search";
|
|
55
80
|
import "react-fast-compare";
|
|
56
81
|
import "lodash-es/pick.js";
|
|
57
82
|
import "lodash-es/get.js";
|
|
@@ -70,6 +95,7 @@ import "lodash-es/toLower.js";
|
|
|
70
95
|
import "lodash-es/union.js";
|
|
71
96
|
import "lodash-es/words.js";
|
|
72
97
|
import "lodash-es/isFinite.js";
|
|
98
|
+
import "@sanity/icons/Add";
|
|
73
99
|
import "observable-callback";
|
|
74
100
|
import "@sanity/util/content";
|
|
75
101
|
import "lodash-es/isPlainObject.js";
|
|
@@ -78,6 +104,9 @@ import "@tanstack/react-virtual";
|
|
|
78
104
|
import "lodash-es/startCase.js";
|
|
79
105
|
import "speakingurl";
|
|
80
106
|
import "@sanity/asset-utils";
|
|
107
|
+
import "@sanity/icons/AccessDenied";
|
|
108
|
+
import "@sanity/icons/HelpCircle";
|
|
109
|
+
import "@sanity/icons/Launch";
|
|
81
110
|
import "@sanity/image-url";
|
|
82
111
|
import "nanoid";
|
|
83
112
|
import "lodash-es/castArray.js";
|
|
@@ -85,8 +114,13 @@ import "rxjs-mergemap-array";
|
|
|
85
114
|
import "@sanity/mutator";
|
|
86
115
|
import "@portabletext/react";
|
|
87
116
|
import "lodash-es/findIndex.js";
|
|
117
|
+
import "@sanity/icons/EyeOpen";
|
|
118
|
+
import "@sanity/icons/Feedback";
|
|
88
119
|
import "@xstate/react";
|
|
89
120
|
import "xstate";
|
|
121
|
+
import "@sanity/icons/FaceHappy";
|
|
122
|
+
import "@sanity/icons/FaceIndifferent";
|
|
123
|
+
import "@sanity/icons/FaceSad";
|
|
90
124
|
import "@sentry/react";
|
|
91
125
|
import "@sanity/schema";
|
|
92
126
|
import "@sanity/util/client";
|
|
@@ -96,15 +130,29 @@ import "json-reduce";
|
|
|
96
130
|
import "rxjs-exhaustmap-with-trailing";
|
|
97
131
|
import "date-fns/isBefore";
|
|
98
132
|
import "date-fns/startOfMinute";
|
|
133
|
+
import "@sanity/icons/Documents";
|
|
134
|
+
import "@sanity/icons/Unknown";
|
|
99
135
|
import "@portabletext/toolkit";
|
|
100
136
|
import "lodash-es/debounce.js";
|
|
137
|
+
import "@sanity/icons/CheckmarkCircle";
|
|
101
138
|
import "polished";
|
|
102
139
|
import "@sanity/client";
|
|
140
|
+
import "@sanity/icons/Reset";
|
|
141
|
+
import "@sanity/icons/Sync";
|
|
103
142
|
import "react-is";
|
|
104
143
|
import "exif-component";
|
|
105
144
|
import "lodash-es/pickBy.js";
|
|
106
145
|
import "swr";
|
|
146
|
+
import "@sanity/icons/Download";
|
|
147
|
+
import "@sanity/icons/Upload";
|
|
148
|
+
import "@sanity/icons/BinaryDocument";
|
|
149
|
+
import "@sanity/icons/Lock";
|
|
150
|
+
import "@sanity/icons/AddDocument";
|
|
151
|
+
import "@sanity/icons/InsertAbove";
|
|
152
|
+
import "@sanity/icons/InsertBelow";
|
|
107
153
|
import "use-hot-module-reload";
|
|
154
|
+
import "@sanity/icons/EllipsisHorizontal";
|
|
155
|
+
import "@sanity/icons/Link";
|
|
108
156
|
import "react-focus-lock";
|
|
109
157
|
import "lodash-es/memoize.js";
|
|
110
158
|
import "lodash-es/sortedIndex.js";
|
|
@@ -120,15 +168,24 @@ import "groq-js";
|
|
|
120
168
|
import "use-sync-external-store/with-selector";
|
|
121
169
|
import "is-network-error";
|
|
122
170
|
import "lodash-es/escapeRegExp.js";
|
|
171
|
+
import "@sanity/icons/Desktop";
|
|
172
|
+
import "@sanity/icons/Moon";
|
|
173
|
+
import "@sanity/icons/Sun";
|
|
123
174
|
import "lodash-es/isEmpty.js";
|
|
124
175
|
import "react-dom/server";
|
|
125
176
|
import "lodash-es/capitalize.js";
|
|
126
177
|
import "lodash-es/last.js";
|
|
127
178
|
import "react-dom/client";
|
|
179
|
+
import "@sanity/icons/ArrowLeft";
|
|
180
|
+
import "@sanity/icons/AddUser";
|
|
181
|
+
import "@sanity/icons/Cog";
|
|
182
|
+
import "@sanity/icons/Checkmark";
|
|
128
183
|
import "date-fns/addWeeks";
|
|
129
184
|
import "date-fns/isAfter";
|
|
130
185
|
import "semver";
|
|
131
186
|
import "lodash-es/isObject.js";
|
|
187
|
+
import "@sanity/icons/User";
|
|
188
|
+
import "@sanity/icons/ChevronLeft";
|
|
132
189
|
const FULLSCREEN_MEDIA_INDEX = 1, POSITION_ABSOLUTE_MEDIA_INDEX = 3, RootFlex = /* @__PURE__ */ styled(Flex).withConfig({
|
|
133
190
|
displayName: "RootFlex",
|
|
134
191
|
componentId: "sc-1y8zfkj-0"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TasksStudioActiveToolLayout.js","sources":["../../src/core/tasks/plugin/TasksStudioActiveToolLayout.tsx"],"sourcesContent":["import {Box, Flex, Layer, useMediaIndex} from '@sanity/ui'\nimport {AnimatePresence} from 'motion/react'\nimport {css, styled} from 'styled-components'\n\nimport {type ActiveToolLayoutProps} from '../../config'\nimport {TasksStudioSidebar} from '../components'\nimport {useTasksEnabled, useTasksNavigation} from '../context'\n\nconst FULLSCREEN_MEDIA_INDEX = 1\nconst POSITION_ABSOLUTE_MEDIA_INDEX = 3\n\nconst RootFlex = styled(Flex)(({theme}) => {\n const media = theme.sanity.media\n\n return css`\n min-height: 100%;\n\n @media (max-width: ${media[POSITION_ABSOLUTE_MEDIA_INDEX]}px) {\n position: relative;\n }\n `\n})\nconst SidebarMotionLayer = styled(Layer)(({theme}) => {\n const media = theme.sanity.media\n\n return css`\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 360px;\n border-left: 1px solid var(--card-border-color);\n box-sizing: border-box;\n overflow: hidden;\n\n box-shadow:\n 0px 6px 8px -4px var(--card-shadow-umbra-color),\n 0px 12px 17px -1px var(--card-shadow-penumbra-color);\n\n @media (max-width: ${media[POSITION_ABSOLUTE_MEDIA_INDEX]}px) {\n bottom: 0;\n position: absolute;\n right: 0;\n top: 0;\n }\n\n @media (max-width: ${media[FULLSCREEN_MEDIA_INDEX]}px) {\n border-left: 0;\n min-width: 100%;\n left: 0;\n }\n `\n})\n\nfunction TasksStudioActiveToolLayoutInner(props: ActiveToolLayoutProps) {\n const mediaIndex = useMediaIndex()\n const {\n state: {isOpen},\n } = useTasksNavigation()\n\n // Lock the scroll when the sidebar is open in fullscreen mode\n const scrollLock = mediaIndex <= FULLSCREEN_MEDIA_INDEX && isOpen\n return (\n <RootFlex sizing=\"border\" height=\"fill\">\n <Box flex={1} height=\"fill\" overflow={scrollLock ? 'hidden' : 'auto'}>\n {props.renderDefault(props)}\n </Box>\n\n <AnimatePresence initial={false}>\n {isOpen && (\n <SidebarMotionLayer zOffset={100} height=\"fill\">\n <TasksStudioSidebar />\n </SidebarMotionLayer>\n )}\n </AnimatePresence>\n </RootFlex>\n )\n}\n\nexport function TasksStudioActiveToolLayout(props: ActiveToolLayoutProps) {\n const {enabled} = useTasksEnabled()\n if (!enabled) {\n return props.renderDefault(props)\n }\n\n return <TasksStudioActiveToolLayoutInner {...props} />\n}\n"],"names":["FULLSCREEN_MEDIA_INDEX","POSITION_ABSOLUTE_MEDIA_INDEX","RootFlex","styled","Flex","withConfig","displayName","componentId","theme","media","sanity","css","SidebarMotionLayer","Layer","TasksStudioActiveToolLayoutInner","props","$","_c","mediaIndex","useMediaIndex","state","t0","useTasksNavigation","isOpen","t1","t2","renderDefault","t3","t4","t5","t6","TasksStudioActiveToolLayout","enabled","useTasksEnabled"],"mappings":"
|
|
1
|
+
{"version":3,"file":"TasksStudioActiveToolLayout.js","sources":["../../src/core/tasks/plugin/TasksStudioActiveToolLayout.tsx"],"sourcesContent":["import {Box, Flex, Layer, useMediaIndex} from '@sanity/ui'\nimport {AnimatePresence} from 'motion/react'\nimport {css, styled} from 'styled-components'\n\nimport {type ActiveToolLayoutProps} from '../../config'\nimport {TasksStudioSidebar} from '../components'\nimport {useTasksEnabled, useTasksNavigation} from '../context'\n\nconst FULLSCREEN_MEDIA_INDEX = 1\nconst POSITION_ABSOLUTE_MEDIA_INDEX = 3\n\nconst RootFlex = styled(Flex)(({theme}) => {\n const media = theme.sanity.media\n\n return css`\n min-height: 100%;\n\n @media (max-width: ${media[POSITION_ABSOLUTE_MEDIA_INDEX]}px) {\n position: relative;\n }\n `\n})\nconst SidebarMotionLayer = styled(Layer)(({theme}) => {\n const media = theme.sanity.media\n\n return css`\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 360px;\n border-left: 1px solid var(--card-border-color);\n box-sizing: border-box;\n overflow: hidden;\n\n box-shadow:\n 0px 6px 8px -4px var(--card-shadow-umbra-color),\n 0px 12px 17px -1px var(--card-shadow-penumbra-color);\n\n @media (max-width: ${media[POSITION_ABSOLUTE_MEDIA_INDEX]}px) {\n bottom: 0;\n position: absolute;\n right: 0;\n top: 0;\n }\n\n @media (max-width: ${media[FULLSCREEN_MEDIA_INDEX]}px) {\n border-left: 0;\n min-width: 100%;\n left: 0;\n }\n `\n})\n\nfunction TasksStudioActiveToolLayoutInner(props: ActiveToolLayoutProps) {\n const mediaIndex = useMediaIndex()\n const {\n state: {isOpen},\n } = useTasksNavigation()\n\n // Lock the scroll when the sidebar is open in fullscreen mode\n const scrollLock = mediaIndex <= FULLSCREEN_MEDIA_INDEX && isOpen\n return (\n <RootFlex sizing=\"border\" height=\"fill\">\n <Box flex={1} height=\"fill\" overflow={scrollLock ? 'hidden' : 'auto'}>\n {props.renderDefault(props)}\n </Box>\n\n <AnimatePresence initial={false}>\n {isOpen && (\n <SidebarMotionLayer zOffset={100} height=\"fill\">\n <TasksStudioSidebar />\n </SidebarMotionLayer>\n )}\n </AnimatePresence>\n </RootFlex>\n )\n}\n\nexport function TasksStudioActiveToolLayout(props: ActiveToolLayoutProps) {\n const {enabled} = useTasksEnabled()\n if (!enabled) {\n return props.renderDefault(props)\n }\n\n return <TasksStudioActiveToolLayoutInner {...props} />\n}\n"],"names":["FULLSCREEN_MEDIA_INDEX","POSITION_ABSOLUTE_MEDIA_INDEX","RootFlex","styled","Flex","withConfig","displayName","componentId","theme","media","sanity","css","SidebarMotionLayer","Layer","TasksStudioActiveToolLayoutInner","props","$","_c","mediaIndex","useMediaIndex","state","t0","useTasksNavigation","isOpen","t1","t2","renderDefault","t3","t4","t5","t6","TasksStudioActiveToolLayout","enabled","useTasksEnabled"],"mappings":"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"}
|
|
@@ -11,20 +11,25 @@ import { getPublishedId } from "@sanity/client/csm";
|
|
|
11
11
|
import "quick-lru";
|
|
12
12
|
import "lodash-es/throttle.js";
|
|
13
13
|
import "lodash-es/isEqual.js";
|
|
14
|
-
import "@sanity/icons";
|
|
14
|
+
import "@sanity/icons/Document";
|
|
15
|
+
import "@sanity/icons/Image";
|
|
15
16
|
import { uuid } from "@sanity/uuid";
|
|
16
17
|
import { useToast } from "@sanity/ui";
|
|
17
18
|
import "@sanity/color";
|
|
18
19
|
import "color2k";
|
|
19
20
|
import "styled-components";
|
|
20
21
|
import "lodash-es/isString.js";
|
|
22
|
+
import "@sanity/icons/Copy";
|
|
21
23
|
import "react-i18next";
|
|
24
|
+
import "@sanity/icons/Clipboard";
|
|
22
25
|
import "./createAgentBundlesStore.js";
|
|
23
26
|
import { useTelemetry } from "@sanity/telemetry/react";
|
|
24
27
|
import "@portabletext/editor";
|
|
25
28
|
import "@sanity/util/paths";
|
|
26
29
|
import "./index.js";
|
|
27
30
|
import "@sanity/types";
|
|
31
|
+
import "@sanity/icons/ChevronRight";
|
|
32
|
+
import "@sanity/icons/Revert";
|
|
28
33
|
import "@sanity/diff-match-patch";
|
|
29
34
|
import "lodash-es/flatten.js";
|
|
30
35
|
import "lodash-es/orderBy.js";
|
|
@@ -32,18 +37,29 @@ import "lodash-es/uniq.js";
|
|
|
32
37
|
import "lodash-es/xor.js";
|
|
33
38
|
import "@sanity/diff-patch";
|
|
34
39
|
import "./version.js";
|
|
40
|
+
import "@sanity/icons/ErrorOutline";
|
|
35
41
|
import "@sanity/id-utils";
|
|
36
42
|
import { useRouter } from "sanity/router";
|
|
43
|
+
import "@sanity/icons/ChevronDown";
|
|
44
|
+
import "@sanity/icons/InfoOutline";
|
|
37
45
|
import "date-fns/addHours";
|
|
38
46
|
import "date-fns/startOfHour";
|
|
47
|
+
import "@sanity/icons/Bolt";
|
|
48
|
+
import "@sanity/icons/Clock";
|
|
49
|
+
import "@sanity/icons/Dot";
|
|
50
|
+
import "@sanity/icons/EarthGlobe";
|
|
39
51
|
import "date-fns/format";
|
|
40
52
|
import "date-fns/isValid";
|
|
41
53
|
import "date-fns/parse";
|
|
42
54
|
import "@sanity/util/legacyDateFormat";
|
|
55
|
+
import "@sanity/icons/Search";
|
|
43
56
|
import "@sanity/ui/theme";
|
|
57
|
+
import "@sanity/icons/Sync";
|
|
44
58
|
import "lodash-es/pick.js";
|
|
45
59
|
import "react-fast-compare";
|
|
60
|
+
import "@sanity/icons/AccessDenied";
|
|
46
61
|
import "lodash-es/startCase.js";
|
|
62
|
+
import "@sanity/icons/Close";
|
|
47
63
|
import "react-focus-lock";
|
|
48
64
|
import debounce from "lodash-es/debounce.js";
|
|
49
65
|
import "date-fns/differenceInDays";
|
|
@@ -53,8 +69,19 @@ import "date-fns/differenceInMonths";
|
|
|
53
69
|
import "date-fns/differenceInSeconds";
|
|
54
70
|
import "date-fns/differenceInWeeks";
|
|
55
71
|
import "date-fns/differenceInYears";
|
|
72
|
+
import "@sanity/icons/AddCircle";
|
|
73
|
+
import "@sanity/icons/Calendar";
|
|
74
|
+
import "@sanity/icons/Circle";
|
|
75
|
+
import "@sanity/icons/Edit";
|
|
76
|
+
import "@sanity/icons/Publish";
|
|
77
|
+
import "@sanity/icons/Timeline";
|
|
78
|
+
import "@sanity/icons/Trash";
|
|
79
|
+
import "@sanity/icons/Unpublish";
|
|
56
80
|
import "@sanity/diff";
|
|
57
81
|
import "mendoza";
|
|
82
|
+
import "@sanity/icons/ArrowDown";
|
|
83
|
+
import "@sanity/icons/ArrowRight";
|
|
84
|
+
import "@sanity/icons/WarningOutline";
|
|
58
85
|
import "@portabletext/sanity-bridge";
|
|
59
86
|
import "motion/react";
|
|
60
87
|
import "lodash-es/get.js";
|
|
@@ -73,6 +100,7 @@ import "lodash-es/toLower.js";
|
|
|
73
100
|
import "lodash-es/union.js";
|
|
74
101
|
import "lodash-es/words.js";
|
|
75
102
|
import "lodash-es/isFinite.js";
|
|
103
|
+
import "@sanity/icons/Add";
|
|
76
104
|
import "observable-callback";
|
|
77
105
|
import "@sanity/util/content";
|
|
78
106
|
import "lodash-es/isPlainObject.js";
|
|
@@ -80,6 +108,8 @@ import "@sanity/insert-menu";
|
|
|
80
108
|
import "@tanstack/react-virtual";
|
|
81
109
|
import "speakingurl";
|
|
82
110
|
import "@sanity/asset-utils";
|
|
111
|
+
import "@sanity/icons/HelpCircle";
|
|
112
|
+
import "@sanity/icons/Launch";
|
|
83
113
|
import "@sanity/image-url";
|
|
84
114
|
import "nanoid";
|
|
85
115
|
import "lodash-es/castArray.js";
|
|
@@ -87,8 +117,13 @@ import "rxjs-mergemap-array";
|
|
|
87
117
|
import "@sanity/mutator";
|
|
88
118
|
import "@portabletext/react";
|
|
89
119
|
import "lodash-es/findIndex.js";
|
|
120
|
+
import "@sanity/icons/EyeOpen";
|
|
121
|
+
import "@sanity/icons/Feedback";
|
|
90
122
|
import "@xstate/react";
|
|
91
123
|
import "xstate";
|
|
124
|
+
import "@sanity/icons/FaceHappy";
|
|
125
|
+
import "@sanity/icons/FaceIndifferent";
|
|
126
|
+
import "@sanity/icons/FaceSad";
|
|
92
127
|
import "@sentry/react";
|
|
93
128
|
import "@sanity/schema";
|
|
94
129
|
import "@sanity/util/client";
|
|
@@ -98,14 +133,29 @@ import "json-reduce";
|
|
|
98
133
|
import "rxjs-exhaustmap-with-trailing";
|
|
99
134
|
import "date-fns/isBefore";
|
|
100
135
|
import "date-fns/startOfMinute";
|
|
136
|
+
import "@sanity/icons/Documents";
|
|
137
|
+
import "@sanity/icons/Unknown";
|
|
101
138
|
import "@portabletext/toolkit";
|
|
139
|
+
import "@sanity/icons/CheckmarkCircle";
|
|
140
|
+
import "@sanity/icons/User";
|
|
141
|
+
import "@sanity/icons/Link";
|
|
142
|
+
import "@sanity/icons/ChevronLeft";
|
|
102
143
|
import "polished";
|
|
103
144
|
import "@sanity/client";
|
|
145
|
+
import "@sanity/icons/Reset";
|
|
104
146
|
import "react-is";
|
|
105
147
|
import "exif-component";
|
|
106
148
|
import "lodash-es/pickBy.js";
|
|
107
149
|
import "swr";
|
|
150
|
+
import "@sanity/icons/Download";
|
|
151
|
+
import "@sanity/icons/Upload";
|
|
152
|
+
import "@sanity/icons/BinaryDocument";
|
|
153
|
+
import "@sanity/icons/Lock";
|
|
154
|
+
import "@sanity/icons/AddDocument";
|
|
155
|
+
import "@sanity/icons/InsertAbove";
|
|
156
|
+
import "@sanity/icons/InsertBelow";
|
|
108
157
|
import "use-hot-module-reload";
|
|
158
|
+
import "@sanity/icons/EllipsisHorizontal";
|
|
109
159
|
import "lodash-es/memoize.js";
|
|
110
160
|
import "lodash-es/sortedIndex.js";
|
|
111
161
|
import "lodash-es/difference.js";
|
|
@@ -120,11 +170,18 @@ import "groq-js";
|
|
|
120
170
|
import "use-sync-external-store/with-selector";
|
|
121
171
|
import "is-network-error";
|
|
122
172
|
import "lodash-es/escapeRegExp.js";
|
|
173
|
+
import "@sanity/icons/Desktop";
|
|
174
|
+
import "@sanity/icons/Moon";
|
|
175
|
+
import "@sanity/icons/Sun";
|
|
123
176
|
import "lodash-es/isEmpty.js";
|
|
124
177
|
import "react-dom/server";
|
|
125
178
|
import "lodash-es/capitalize.js";
|
|
126
179
|
import "lodash-es/last.js";
|
|
127
180
|
import "react-dom/client";
|
|
181
|
+
import "@sanity/icons/ArrowLeft";
|
|
182
|
+
import "@sanity/icons/AddUser";
|
|
183
|
+
import "@sanity/icons/Cog";
|
|
184
|
+
import "@sanity/icons/Checkmark";
|
|
128
185
|
import "date-fns/addWeeks";
|
|
129
186
|
import "date-fns/isAfter";
|
|
130
187
|
import "semver";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TasksStudioLayout.js","sources":["../../src/core/tasks/context/enabled/TasksEnabledProvider.tsx","../../src/core/tasks/context/navigation/TasksNavigationProvider.tsx","../../src/core/tasks/store/reducer.ts","../../src/core/tasks/store/useTasksStore.ts","../../src/core/tasks/context/tasks/TasksProvider.tsx","../../src/core/tasks/context/upsell/TasksUpsellProvider.tsx","../../src/core/tasks/plugin/TasksStudioLayout.tsx"],"sourcesContent":["import {useMemo} from 'react'\nimport {TasksEnabledContext} from 'sanity/_singletons'\n\nimport {useFeatureEnabled} from '../../../hooks'\nimport {FEATURES} from '../../../hooks/useFeatureEnabled'\nimport {useWorkspace} from '../../../studio/workspace'\nimport {type TasksEnabledContextValue} from './types'\n\ninterface TaksEnabledProviderProps {\n children: React.ReactNode\n}\n\n/**\n * @internal\n */\nexport function TasksEnabledProvider({children}: TaksEnabledProviderProps) {\n const {enabled, isLoading, error} = useFeatureEnabled(FEATURES.sanityTasks)\n\n const isWorkspaceEnabled = useWorkspace().tasks?.enabled\n\n const value: TasksEnabledContextValue = useMemo(() => {\n if (!isWorkspaceEnabled || isLoading || error) {\n return {\n enabled: false,\n mode: null,\n }\n }\n return {\n enabled: true,\n mode: enabled ? 'default' : 'upsell',\n }\n }, [enabled, isLoading, isWorkspaceEnabled, error])\n\n return <TasksEnabledContext.Provider value={value}>{children}</TasksEnabledContext.Provider>\n}\n","import {useTelemetry} from '@sanity/telemetry/react'\nimport {useToast} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {type ReactNode, useCallback, useEffect, useMemo, useReducer} from 'react'\nimport {TasksNavigationContext} from 'sanity/_singletons'\nimport {useRouter} from 'sanity/router'\n\nimport {TaskLinkCopied, TaskLinkOpened} from '../../__telemetry__/tasks.telemetry'\nimport {\n type Action,\n type SidebarTabsIds,\n type State,\n TASKS_SELECTED_TASK_SEARCH_PARAM,\n TASKS_SIDEBAR_SEARCH_PARAM,\n TASKS_VIEW_MODE_SEARCH_PARAM,\n type ViewModeOptions,\n} from './types'\n\nconst initialState: State = {\n viewMode: 'list',\n selectedTask: null,\n activeTabId: 'assigned',\n duplicateTaskValues: null,\n isOpen: false,\n}\n\nfunction reducer(state: State, action: Action): State {\n switch (action.type) {\n case 'TOGGLE_TASKS_VIEW': {\n if (!action.payload) {\n return {\n ...initialState,\n isOpen: action.payload,\n }\n }\n return {\n ...state,\n isOpen: action.payload,\n }\n }\n case 'CREATE_TASK':\n return {\n ...state,\n viewMode: 'create',\n selectedTask: uuid(),\n }\n case 'EDIT_TASK':\n return {\n ...state,\n viewMode: 'edit',\n selectedTask: action.payload.id,\n }\n case 'EDIT_DRAFT':\n return {\n ...state,\n viewMode: 'draft',\n selectedTask: action.payload.id,\n }\n case 'DUPLICATE_TASK':\n return {\n ...state,\n viewMode: 'duplicate',\n selectedTask: uuid(),\n duplicateTaskValues: action.payload.duplicateTaskValues,\n }\n case 'SET_ACTIVE_TAB':\n return {\n ...state,\n viewMode: 'list',\n activeTabId: action.payload,\n }\n case 'NAVIGATE_TO_LIST':\n return {\n ...state,\n viewMode: 'list',\n }\n default:\n return state\n }\n}\n\nexport const TasksNavigationProvider = ({children}: {children: ReactNode}) => {\n const [state, dispatch] = useReducer(reducer, initialState)\n const router = useRouter()\n const toast = useToast()\n const telemetry = useTelemetry()\n\n const setViewMode = useCallback((viewMode: ViewModeOptions) => {\n switch (viewMode.type) {\n case 'list':\n dispatch({type: 'NAVIGATE_TO_LIST'})\n break\n case 'create':\n dispatch({type: 'CREATE_TASK'})\n break\n case 'edit':\n dispatch({type: 'EDIT_TASK', payload: {id: viewMode.id}})\n break\n case 'duplicate':\n dispatch({\n type: 'DUPLICATE_TASK',\n payload: {duplicateTaskValues: viewMode.duplicateTaskValues},\n })\n break\n case 'draft':\n dispatch({type: 'EDIT_DRAFT', payload: {id: viewMode.id}})\n break\n default:\n break\n }\n }, [])\n\n const setActiveTab = useCallback((tabId: SidebarTabsIds) => {\n dispatch({type: 'SET_ACTIVE_TAB', payload: tabId})\n }, [])\n\n const handleCloseTasks = useCallback(() => {\n dispatch({type: 'TOGGLE_TASKS_VIEW', payload: false})\n\n // Remove task-related query parameters from the URL\n router.navigate({\n stickyParams: {\n ...router.stickyParams,\n [TASKS_SIDEBAR_SEARCH_PARAM]: null,\n [TASKS_VIEW_MODE_SEARCH_PARAM]: null,\n [TASKS_SELECTED_TASK_SEARCH_PARAM]: null,\n },\n })\n }, [router])\n\n const handleOpenTasks = useCallback(() => {\n dispatch({type: 'TOGGLE_TASKS_VIEW', payload: true})\n }, [])\n\n const handleCopyLinkToTask = useCallback(() => {\n const url = new URL(window.location.href)\n url.searchParams.set(TASKS_SIDEBAR_SEARCH_PARAM, 'tasks')\n url.searchParams.set(TASKS_VIEW_MODE_SEARCH_PARAM, state.viewMode)\n if (state.selectedTask) {\n url.searchParams.set(TASKS_SELECTED_TASK_SEARCH_PARAM, state.selectedTask)\n }\n navigator.clipboard\n .writeText(url.toString())\n .then(() => {\n telemetry.log(TaskLinkCopied)\n })\n .catch(() => {\n toast.push({\n closable: true,\n status: 'error',\n title: 'Failed to copy link to clipboard',\n })\n })\n }, [state.selectedTask, state.viewMode, telemetry, toast])\n\n const sidebar = router.stickyParams[TASKS_SIDEBAR_SEARCH_PARAM]\n const viewMode = router.stickyParams[TASKS_VIEW_MODE_SEARCH_PARAM]\n const selectedTask = router.stickyParams[TASKS_SELECTED_TASK_SEARCH_PARAM]\n\n useEffect(() => {\n // listen to the URL to open the tasks view if the sidebar is set to task.\n if (sidebar !== 'tasks') {\n return\n }\n dispatch({type: 'TOGGLE_TASKS_VIEW', payload: true})\n if (viewMode === 'edit' && selectedTask) {\n dispatch({type: 'EDIT_TASK', payload: {id: selectedTask}})\n telemetry.log(TaskLinkOpened)\n }\n }, [selectedTask, sidebar, telemetry, viewMode])\n\n const value = useMemo(\n () => ({\n state,\n setViewMode,\n setActiveTab,\n handleCloseTasks,\n handleOpenTasks,\n handleCopyLinkToTask,\n }),\n [handleCloseTasks, handleCopyLinkToTask, handleOpenTasks, setActiveTab, setViewMode, state],\n )\n\n return <TasksNavigationContext.Provider value={value}>{children}</TasksNavigationContext.Provider>\n}\n","import {type TaskDocument, type TaskPostPayload} from '../types'\n\ninterface TaskAddedAction {\n payload: TaskDocument | TaskPostPayload\n type: 'TASK_ADDED'\n}\n\ninterface TaskDeletedAction {\n id: string\n type: 'TASK_DELETED'\n}\n\ninterface TaskUpdatedAction {\n payload: TaskDocument | Partial<TaskPostPayload>\n type: 'TASK_UPDATED'\n}\n\ninterface TasksSetAction {\n tasks: TaskDocument[]\n type: 'TASKS_SET'\n}\n\ninterface TaskReceivedAction {\n payload: TaskDocument\n type: 'TASK_RECEIVED'\n}\n\nexport type TasksReducerAction =\n | TaskAddedAction\n | TaskDeletedAction\n | TaskUpdatedAction\n | TasksSetAction\n | TaskReceivedAction\n\nexport interface TasksReducerState {\n tasks: Record<string, TaskDocument>\n}\n\n/**\n * Transform an array of tasks into an object with the task id as key:\n * ```\n * {\n * 'task-1': { _id: 'task-1', ... },\n * 'task-2': { _id: 'task-2', ... },\n * }\n * ```\n */\nfunction createTasksSet(tasks: TaskDocument[]) {\n const tasksById = tasks.reduce((acc, task) => ({...acc, [task._id]: task}), {})\n return tasksById\n}\n\nexport function tasksReducer(\n state: TasksReducerState,\n action: TasksReducerAction,\n): TasksReducerState {\n switch (action.type) {\n case 'TASKS_SET': {\n // Create an object with the task id as key\n const tasksById = createTasksSet(action.tasks)\n\n return {\n ...state,\n tasks: tasksById,\n }\n }\n\n case 'TASK_ADDED': {\n const nextTaskResult = action.payload as TaskDocument\n const nextTaskValue = nextTaskResult satisfies TaskDocument\n\n const nextTask = {\n [nextTaskResult._id]: {\n ...state.tasks[nextTaskResult._id],\n ...nextTaskValue,\n _state: nextTaskResult._state || undefined,\n // If the task is created optimistically, it won't have a createdAt date as this is set on the server.\n // However, we need to set a createdAt date to be able to sort the tasks correctly.\n // Therefore, we set the createdAt date to the current date here if it's missing while creating the task.\n // Once the task is created and received from the server, the createdAt date will be updated to the correct value.\n _createdAt: nextTaskResult._createdAt || new Date().toISOString(),\n } satisfies TaskDocument,\n }\n\n return {\n ...state,\n tasks: {\n ...state.tasks,\n ...nextTask,\n },\n }\n }\n\n case 'TASK_RECEIVED': {\n const nextTaskResult = action.payload\n\n return {\n ...state,\n tasks: {\n ...state.tasks,\n [nextTaskResult._id]: nextTaskResult,\n },\n }\n }\n\n case 'TASK_DELETED': {\n const {[action.id]: _, ...restTasks} = state.tasks\n\n return {\n ...state,\n tasks: restTasks,\n }\n }\n\n case 'TASK_UPDATED': {\n const updatedTask = action.payload\n const id = updatedTask._id as string\n const task = state.tasks[id]\n\n const nextTask = {\n // Add existing task data\n ...task,\n // Add incoming task data\n ...updatedTask,\n } satisfies TaskDocument\n\n return {\n ...state,\n tasks: {\n ...state.tasks,\n [id]: nextTask,\n },\n }\n }\n\n default:\n return state\n }\n}\n","import {type ListenEvent, type ListenOptions} from '@sanity/client'\nimport {useCallback, useEffect, useMemo, useReducer, useState} from 'react'\nimport {catchError, of} from 'rxjs'\n\nimport {useAddonDataset} from '../../studio'\nimport {getPublishedId} from '../../util'\nimport {type Loadable, type TaskDocument} from '../types'\nimport {tasksReducer, type TasksReducerAction, type TasksReducerState} from './reducer'\n\nexport interface TasksStoreOptions {\n documentId?: string\n}\n\ninterface TasksStoreReturnType extends Loadable<TaskDocument[]> {\n dispatch: React.Dispatch<TasksReducerAction>\n}\n\nconst INITIAL_STATE: TasksReducerState = {\n tasks: {},\n}\n\nconst LISTEN_OPTIONS: ListenOptions = {\n events: ['welcome', 'mutation', 'reconnect'],\n includeResult: true,\n visibility: 'query',\n includeAllVersions: true,\n tag: 'tasks-store',\n}\n\nconst SORT_FIELD = '_createdAt'\nconst SORT_ORDER = 'desc'\n\nconst QUERY_FILTERS = [`_type == \"tasks.task\"`]\n\nconst QUERY_PROJECTION = `{\n ...,\n}`\n\n// Newest tasks first\nconst QUERY_SORT_ORDER = `order(${SORT_FIELD} ${SORT_ORDER})`\n\nconst QUERY = `*[${QUERY_FILTERS.join(' && ')}] ${QUERY_PROJECTION} | ${QUERY_SORT_ORDER}`\n\nexport function useTasksStore(opts: TasksStoreOptions): TasksStoreReturnType {\n const {client} = useAddonDataset()\n const {documentId} = opts\n\n const [state, dispatch] = useReducer(tasksReducer, INITIAL_STATE)\n const [isLoading, setIsLoading] = useState<boolean>(client !== null)\n const [error, setError] = useState<Error | null>(null)\n\n const params = useMemo(\n () => ({documentId: documentId ? getPublishedId(documentId) : null}),\n [documentId],\n )\n\n const initialFetch = useCallback(async () => {\n if (!client) {\n setIsLoading(false)\n return\n }\n\n try {\n const res = await client.fetch(QUERY, params)\n dispatch({type: 'TASKS_SET', tasks: res})\n setIsLoading(false)\n } catch (err) {\n setError(err)\n }\n }, [client, params])\n\n const handleListenerEvent = useCallback(\n async (event: ListenEvent<Record<string, TaskDocument>>) => {\n // Fetch all tasks on initial connection\n if (event.type === 'welcome') {\n setIsLoading(true)\n await initialFetch()\n setIsLoading(false)\n }\n\n // The reconnect event means that we are trying to reconnect to the realtime listener.\n // In this case we set loading to true to indicate that we're trying to\n // reconnect. Once a connection has been established, the welcome event\n // will be received and we'll fetch all tasks again (above).\n if (event.type === 'reconnect') {\n setIsLoading(true)\n }\n\n // Handle mutations (create, update, delete) from the realtime listener\n // and update the tasks store accordingly\n if (event.type === 'mutation') {\n if (event.transition === 'appear') {\n const nextTask = event.result as TaskDocument | undefined\n\n if (nextTask) {\n dispatch({\n type: 'TASK_RECEIVED',\n payload: nextTask,\n })\n }\n }\n\n if (event.transition === 'disappear') {\n dispatch({type: 'TASK_DELETED', id: event.documentId})\n }\n\n if (event.transition === 'update') {\n const updatedTask = event.result as TaskDocument | undefined\n\n if (updatedTask) {\n dispatch({\n type: 'TASK_UPDATED',\n payload: updatedTask,\n })\n }\n }\n }\n },\n [initialFetch],\n )\n\n const listener$ = useMemo(() => {\n if (!client) return of()\n\n const events$ = client.observable.listen(QUERY, params, LISTEN_OPTIONS).pipe(\n catchError((err) => {\n setError(err)\n return of(err)\n }),\n )\n\n return events$\n }, [client, params])\n\n useEffect(() => {\n const sub = listener$.subscribe(handleListenerEvent)\n\n return () => {\n sub?.unsubscribe()\n }\n }, [handleListenerEvent, listener$])\n\n // Transform tasks object to array\n const tasksAsArray = useMemo(() => Object.values(state.tasks), [state.tasks])\n\n return {\n data: tasksAsArray,\n dispatch,\n error,\n isLoading,\n }\n}\n","import debounce from 'lodash-es/debounce.js'\nimport {useMemo, useState} from 'react'\nimport {TasksContext} from 'sanity/_singletons'\n\nimport {useTasksStore} from '../../store'\nimport {type ActiveDocument, type TasksContextValue} from './types'\n\ninterface TasksProviderProps {\n children: React.ReactNode\n}\n\nconst EMPTY_ARRAY: [] = []\n\n/**\n * @internal\n */\nexport function TasksProvider(props: TasksProviderProps) {\n const {children} = props\n const [activeDocument, setActiveDocument] = useState<ActiveDocument | null>(null)\n const {data = EMPTY_ARRAY, isLoading} = useTasksStore({})\n\n // This change is debounced to wait until the next document loads if we are switching between documents.\n const debouncedSetActiveDocument = useMemo(() => debounce(setActiveDocument, 1000), [])\n\n const value: TasksContextValue = useMemo(\n () => ({\n activeDocument,\n setActiveDocument: debouncedSetActiveDocument,\n isLoading,\n data: data ?? [],\n }),\n [activeDocument, data, isLoading, debouncedSetActiveDocument],\n )\n\n return <TasksContext.Provider value={value}>{children}</TasksContext.Provider>\n}\n","import {TasksUpsellContext} from 'sanity/_singletons'\n\nimport {getDialogPropsFromContext, useUpsellContext} from '../../../hooks/useUpsellContext'\nimport {UpsellDialog} from '../../../studio/upsell/UpsellDialog'\n\n/**\n * @beta\n * @hidden\n */\nexport function TasksUpsellProvider(props: {children: React.ReactNode}) {\n const contextValue = useUpsellContext({\n dataUri: '/journey/tasks',\n feature: 'tasks',\n })\n\n return (\n <TasksUpsellContext.Provider value={contextValue}>\n {props.children}\n <UpsellDialog {...getDialogPropsFromContext(contextValue)} />\n </TasksUpsellContext.Provider>\n )\n}\n","import {type LayoutProps} from '../../config'\nimport {AddonDatasetProvider} from '../../studio'\nimport {\n TasksEnabledProvider,\n TasksNavigationProvider,\n TasksProvider,\n TasksUpsellProvider,\n useTasksEnabled,\n} from '../context'\n\nconst TasksStudioLayoutInner = (props: LayoutProps) => {\n const {enabled, mode} = useTasksEnabled()\n\n if (!enabled) {\n return props.renderDefault(props)\n }\n\n const children = (\n <TasksProvider>\n <TasksNavigationProvider>{props.renderDefault(props)}</TasksNavigationProvider>\n </TasksProvider>\n )\n\n if (mode === 'upsell') {\n return (\n <AddonDatasetProvider>\n <TasksUpsellProvider>{children}</TasksUpsellProvider>\n </AddonDatasetProvider>\n )\n }\n\n return <AddonDatasetProvider>{children}</AddonDatasetProvider>\n}\n\nexport function TasksStudioLayout(props: LayoutProps) {\n return (\n <TasksEnabledProvider>\n <TasksStudioLayoutInner {...props} />\n </TasksEnabledProvider>\n )\n}\n"],"names":["TasksEnabledProvider","t0","$","_c","children","enabled","isLoading","error","useFeatureEnabled","FEATURES","sanityTasks","isWorkspaceEnabled","useWorkspace","tasks","t1","bb0","t2","for","mode","t3","value","initialState","viewMode","selectedTask","activeTabId","duplicateTaskValues","isOpen","reducer","state","action","type","payload","uuid","id","TasksNavigationProvider","dispatch","useReducer","router","useRouter","toast","useToast","telemetry","useTelemetry","Symbol","bb2","setViewMode","tabId","setActiveTab","navigate","stickyParams","TASKS_SIDEBAR_SEARCH_PARAM","TASKS_VIEW_MODE_SEARCH_PARAM","TASKS_SELECTED_TASK_SEARCH_PARAM","handleCloseTasks","t4","handleOpenTasks","t5","url","URL","window","location","href","searchParams","set","navigator","clipboard","writeText","toString","then","log","TaskLinkCopied","catch","push","closable","status","title","handleCopyLinkToTask","sidebar","viewMode_0","t6","t7","TaskLinkOpened","useEffect","t8","t9","createTasksSet","reduce","acc","task","_id","tasksReducer","tasksById","nextTaskResult","nextTaskValue","nextTask","_state","undefined","_createdAt","Date","toISOString","_","restTasks","updatedTask","INITIAL_STATE","LISTEN_OPTIONS","events","includeResult","visibility","includeAllVersions","tag","SORT_FIELD","SORT_ORDER","QUERY_FILTERS","QUERY_PROJECTION","QUERY_SORT_ORDER","QUERY","join","useTasksStore","opts","client","useAddonDataset","documentId","setIsLoading","useState","setError","getPublishedId","params","res","fetch","err","initialFetch","event","transition","result","handleListenerEvent","of","observable","err_0","listen","pipe","catchError","listener$","sub","subscribe","unsubscribe","Object","values","tasksAsArray","data","EMPTY_ARRAY","TasksProvider","props","activeDocument","setActiveDocument","debounce","debouncedSetActiveDocument","TasksUpsellProvider","dataUri","feature","contextValue","useUpsellContext","getDialogPropsFromContext","TasksStudioLayoutInner","useTasksEnabled","renderDefault","TasksStudioLayout"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TasksStudioLayout.js","sources":["../../src/core/tasks/context/enabled/TasksEnabledProvider.tsx","../../src/core/tasks/context/navigation/TasksNavigationProvider.tsx","../../src/core/tasks/store/reducer.ts","../../src/core/tasks/store/useTasksStore.ts","../../src/core/tasks/context/tasks/TasksProvider.tsx","../../src/core/tasks/context/upsell/TasksUpsellProvider.tsx","../../src/core/tasks/plugin/TasksStudioLayout.tsx"],"sourcesContent":["import {useMemo} from 'react'\nimport {TasksEnabledContext} from 'sanity/_singletons'\n\nimport {useFeatureEnabled} from '../../../hooks'\nimport {FEATURES} from '../../../hooks/useFeatureEnabled'\nimport {useWorkspace} from '../../../studio/workspace'\nimport {type TasksEnabledContextValue} from './types'\n\ninterface TaksEnabledProviderProps {\n children: React.ReactNode\n}\n\n/**\n * @internal\n */\nexport function TasksEnabledProvider({children}: TaksEnabledProviderProps) {\n const {enabled, isLoading, error} = useFeatureEnabled(FEATURES.sanityTasks)\n\n const isWorkspaceEnabled = useWorkspace().tasks?.enabled\n\n const value: TasksEnabledContextValue = useMemo(() => {\n if (!isWorkspaceEnabled || isLoading || error) {\n return {\n enabled: false,\n mode: null,\n }\n }\n return {\n enabled: true,\n mode: enabled ? 'default' : 'upsell',\n }\n }, [enabled, isLoading, isWorkspaceEnabled, error])\n\n return <TasksEnabledContext.Provider value={value}>{children}</TasksEnabledContext.Provider>\n}\n","import {useTelemetry} from '@sanity/telemetry/react'\nimport {useToast} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {type ReactNode, useCallback, useEffect, useMemo, useReducer} from 'react'\nimport {TasksNavigationContext} from 'sanity/_singletons'\nimport {useRouter} from 'sanity/router'\n\nimport {TaskLinkCopied, TaskLinkOpened} from '../../__telemetry__/tasks.telemetry'\nimport {\n type Action,\n type SidebarTabsIds,\n type State,\n TASKS_SELECTED_TASK_SEARCH_PARAM,\n TASKS_SIDEBAR_SEARCH_PARAM,\n TASKS_VIEW_MODE_SEARCH_PARAM,\n type ViewModeOptions,\n} from './types'\n\nconst initialState: State = {\n viewMode: 'list',\n selectedTask: null,\n activeTabId: 'assigned',\n duplicateTaskValues: null,\n isOpen: false,\n}\n\nfunction reducer(state: State, action: Action): State {\n switch (action.type) {\n case 'TOGGLE_TASKS_VIEW': {\n if (!action.payload) {\n return {\n ...initialState,\n isOpen: action.payload,\n }\n }\n return {\n ...state,\n isOpen: action.payload,\n }\n }\n case 'CREATE_TASK':\n return {\n ...state,\n viewMode: 'create',\n selectedTask: uuid(),\n }\n case 'EDIT_TASK':\n return {\n ...state,\n viewMode: 'edit',\n selectedTask: action.payload.id,\n }\n case 'EDIT_DRAFT':\n return {\n ...state,\n viewMode: 'draft',\n selectedTask: action.payload.id,\n }\n case 'DUPLICATE_TASK':\n return {\n ...state,\n viewMode: 'duplicate',\n selectedTask: uuid(),\n duplicateTaskValues: action.payload.duplicateTaskValues,\n }\n case 'SET_ACTIVE_TAB':\n return {\n ...state,\n viewMode: 'list',\n activeTabId: action.payload,\n }\n case 'NAVIGATE_TO_LIST':\n return {\n ...state,\n viewMode: 'list',\n }\n default:\n return state\n }\n}\n\nexport const TasksNavigationProvider = ({children}: {children: ReactNode}) => {\n const [state, dispatch] = useReducer(reducer, initialState)\n const router = useRouter()\n const toast = useToast()\n const telemetry = useTelemetry()\n\n const setViewMode = useCallback((viewMode: ViewModeOptions) => {\n switch (viewMode.type) {\n case 'list':\n dispatch({type: 'NAVIGATE_TO_LIST'})\n break\n case 'create':\n dispatch({type: 'CREATE_TASK'})\n break\n case 'edit':\n dispatch({type: 'EDIT_TASK', payload: {id: viewMode.id}})\n break\n case 'duplicate':\n dispatch({\n type: 'DUPLICATE_TASK',\n payload: {duplicateTaskValues: viewMode.duplicateTaskValues},\n })\n break\n case 'draft':\n dispatch({type: 'EDIT_DRAFT', payload: {id: viewMode.id}})\n break\n default:\n break\n }\n }, [])\n\n const setActiveTab = useCallback((tabId: SidebarTabsIds) => {\n dispatch({type: 'SET_ACTIVE_TAB', payload: tabId})\n }, [])\n\n const handleCloseTasks = useCallback(() => {\n dispatch({type: 'TOGGLE_TASKS_VIEW', payload: false})\n\n // Remove task-related query parameters from the URL\n router.navigate({\n stickyParams: {\n ...router.stickyParams,\n [TASKS_SIDEBAR_SEARCH_PARAM]: null,\n [TASKS_VIEW_MODE_SEARCH_PARAM]: null,\n [TASKS_SELECTED_TASK_SEARCH_PARAM]: null,\n },\n })\n }, [router])\n\n const handleOpenTasks = useCallback(() => {\n dispatch({type: 'TOGGLE_TASKS_VIEW', payload: true})\n }, [])\n\n const handleCopyLinkToTask = useCallback(() => {\n const url = new URL(window.location.href)\n url.searchParams.set(TASKS_SIDEBAR_SEARCH_PARAM, 'tasks')\n url.searchParams.set(TASKS_VIEW_MODE_SEARCH_PARAM, state.viewMode)\n if (state.selectedTask) {\n url.searchParams.set(TASKS_SELECTED_TASK_SEARCH_PARAM, state.selectedTask)\n }\n navigator.clipboard\n .writeText(url.toString())\n .then(() => {\n telemetry.log(TaskLinkCopied)\n })\n .catch(() => {\n toast.push({\n closable: true,\n status: 'error',\n title: 'Failed to copy link to clipboard',\n })\n })\n }, [state.selectedTask, state.viewMode, telemetry, toast])\n\n const sidebar = router.stickyParams[TASKS_SIDEBAR_SEARCH_PARAM]\n const viewMode = router.stickyParams[TASKS_VIEW_MODE_SEARCH_PARAM]\n const selectedTask = router.stickyParams[TASKS_SELECTED_TASK_SEARCH_PARAM]\n\n useEffect(() => {\n // listen to the URL to open the tasks view if the sidebar is set to task.\n if (sidebar !== 'tasks') {\n return\n }\n dispatch({type: 'TOGGLE_TASKS_VIEW', payload: true})\n if (viewMode === 'edit' && selectedTask) {\n dispatch({type: 'EDIT_TASK', payload: {id: selectedTask}})\n telemetry.log(TaskLinkOpened)\n }\n }, [selectedTask, sidebar, telemetry, viewMode])\n\n const value = useMemo(\n () => ({\n state,\n setViewMode,\n setActiveTab,\n handleCloseTasks,\n handleOpenTasks,\n handleCopyLinkToTask,\n }),\n [handleCloseTasks, handleCopyLinkToTask, handleOpenTasks, setActiveTab, setViewMode, state],\n )\n\n return <TasksNavigationContext.Provider value={value}>{children}</TasksNavigationContext.Provider>\n}\n","import {type TaskDocument, type TaskPostPayload} from '../types'\n\ninterface TaskAddedAction {\n payload: TaskDocument | TaskPostPayload\n type: 'TASK_ADDED'\n}\n\ninterface TaskDeletedAction {\n id: string\n type: 'TASK_DELETED'\n}\n\ninterface TaskUpdatedAction {\n payload: TaskDocument | Partial<TaskPostPayload>\n type: 'TASK_UPDATED'\n}\n\ninterface TasksSetAction {\n tasks: TaskDocument[]\n type: 'TASKS_SET'\n}\n\ninterface TaskReceivedAction {\n payload: TaskDocument\n type: 'TASK_RECEIVED'\n}\n\nexport type TasksReducerAction =\n | TaskAddedAction\n | TaskDeletedAction\n | TaskUpdatedAction\n | TasksSetAction\n | TaskReceivedAction\n\nexport interface TasksReducerState {\n tasks: Record<string, TaskDocument>\n}\n\n/**\n * Transform an array of tasks into an object with the task id as key:\n * ```\n * {\n * 'task-1': { _id: 'task-1', ... },\n * 'task-2': { _id: 'task-2', ... },\n * }\n * ```\n */\nfunction createTasksSet(tasks: TaskDocument[]) {\n const tasksById = tasks.reduce((acc, task) => ({...acc, [task._id]: task}), {})\n return tasksById\n}\n\nexport function tasksReducer(\n state: TasksReducerState,\n action: TasksReducerAction,\n): TasksReducerState {\n switch (action.type) {\n case 'TASKS_SET': {\n // Create an object with the task id as key\n const tasksById = createTasksSet(action.tasks)\n\n return {\n ...state,\n tasks: tasksById,\n }\n }\n\n case 'TASK_ADDED': {\n const nextTaskResult = action.payload as TaskDocument\n const nextTaskValue = nextTaskResult satisfies TaskDocument\n\n const nextTask = {\n [nextTaskResult._id]: {\n ...state.tasks[nextTaskResult._id],\n ...nextTaskValue,\n _state: nextTaskResult._state || undefined,\n // If the task is created optimistically, it won't have a createdAt date as this is set on the server.\n // However, we need to set a createdAt date to be able to sort the tasks correctly.\n // Therefore, we set the createdAt date to the current date here if it's missing while creating the task.\n // Once the task is created and received from the server, the createdAt date will be updated to the correct value.\n _createdAt: nextTaskResult._createdAt || new Date().toISOString(),\n } satisfies TaskDocument,\n }\n\n return {\n ...state,\n tasks: {\n ...state.tasks,\n ...nextTask,\n },\n }\n }\n\n case 'TASK_RECEIVED': {\n const nextTaskResult = action.payload\n\n return {\n ...state,\n tasks: {\n ...state.tasks,\n [nextTaskResult._id]: nextTaskResult,\n },\n }\n }\n\n case 'TASK_DELETED': {\n const {[action.id]: _, ...restTasks} = state.tasks\n\n return {\n ...state,\n tasks: restTasks,\n }\n }\n\n case 'TASK_UPDATED': {\n const updatedTask = action.payload\n const id = updatedTask._id as string\n const task = state.tasks[id]\n\n const nextTask = {\n // Add existing task data\n ...task,\n // Add incoming task data\n ...updatedTask,\n } satisfies TaskDocument\n\n return {\n ...state,\n tasks: {\n ...state.tasks,\n [id]: nextTask,\n },\n }\n }\n\n default:\n return state\n }\n}\n","import {type ListenEvent, type ListenOptions} from '@sanity/client'\nimport {useCallback, useEffect, useMemo, useReducer, useState} from 'react'\nimport {catchError, of} from 'rxjs'\n\nimport {useAddonDataset} from '../../studio'\nimport {getPublishedId} from '../../util'\nimport {type Loadable, type TaskDocument} from '../types'\nimport {tasksReducer, type TasksReducerAction, type TasksReducerState} from './reducer'\n\nexport interface TasksStoreOptions {\n documentId?: string\n}\n\ninterface TasksStoreReturnType extends Loadable<TaskDocument[]> {\n dispatch: React.Dispatch<TasksReducerAction>\n}\n\nconst INITIAL_STATE: TasksReducerState = {\n tasks: {},\n}\n\nconst LISTEN_OPTIONS: ListenOptions = {\n events: ['welcome', 'mutation', 'reconnect'],\n includeResult: true,\n visibility: 'query',\n includeAllVersions: true,\n tag: 'tasks-store',\n}\n\nconst SORT_FIELD = '_createdAt'\nconst SORT_ORDER = 'desc'\n\nconst QUERY_FILTERS = [`_type == \"tasks.task\"`]\n\nconst QUERY_PROJECTION = `{\n ...,\n}`\n\n// Newest tasks first\nconst QUERY_SORT_ORDER = `order(${SORT_FIELD} ${SORT_ORDER})`\n\nconst QUERY = `*[${QUERY_FILTERS.join(' && ')}] ${QUERY_PROJECTION} | ${QUERY_SORT_ORDER}`\n\nexport function useTasksStore(opts: TasksStoreOptions): TasksStoreReturnType {\n const {client} = useAddonDataset()\n const {documentId} = opts\n\n const [state, dispatch] = useReducer(tasksReducer, INITIAL_STATE)\n const [isLoading, setIsLoading] = useState<boolean>(client !== null)\n const [error, setError] = useState<Error | null>(null)\n\n const params = useMemo(\n () => ({documentId: documentId ? getPublishedId(documentId) : null}),\n [documentId],\n )\n\n const initialFetch = useCallback(async () => {\n if (!client) {\n setIsLoading(false)\n return\n }\n\n try {\n const res = await client.fetch(QUERY, params)\n dispatch({type: 'TASKS_SET', tasks: res})\n setIsLoading(false)\n } catch (err) {\n setError(err)\n }\n }, [client, params])\n\n const handleListenerEvent = useCallback(\n async (event: ListenEvent<Record<string, TaskDocument>>) => {\n // Fetch all tasks on initial connection\n if (event.type === 'welcome') {\n setIsLoading(true)\n await initialFetch()\n setIsLoading(false)\n }\n\n // The reconnect event means that we are trying to reconnect to the realtime listener.\n // In this case we set loading to true to indicate that we're trying to\n // reconnect. Once a connection has been established, the welcome event\n // will be received and we'll fetch all tasks again (above).\n if (event.type === 'reconnect') {\n setIsLoading(true)\n }\n\n // Handle mutations (create, update, delete) from the realtime listener\n // and update the tasks store accordingly\n if (event.type === 'mutation') {\n if (event.transition === 'appear') {\n const nextTask = event.result as TaskDocument | undefined\n\n if (nextTask) {\n dispatch({\n type: 'TASK_RECEIVED',\n payload: nextTask,\n })\n }\n }\n\n if (event.transition === 'disappear') {\n dispatch({type: 'TASK_DELETED', id: event.documentId})\n }\n\n if (event.transition === 'update') {\n const updatedTask = event.result as TaskDocument | undefined\n\n if (updatedTask) {\n dispatch({\n type: 'TASK_UPDATED',\n payload: updatedTask,\n })\n }\n }\n }\n },\n [initialFetch],\n )\n\n const listener$ = useMemo(() => {\n if (!client) return of()\n\n const events$ = client.observable.listen(QUERY, params, LISTEN_OPTIONS).pipe(\n catchError((err) => {\n setError(err)\n return of(err)\n }),\n )\n\n return events$\n }, [client, params])\n\n useEffect(() => {\n const sub = listener$.subscribe(handleListenerEvent)\n\n return () => {\n sub?.unsubscribe()\n }\n }, [handleListenerEvent, listener$])\n\n // Transform tasks object to array\n const tasksAsArray = useMemo(() => Object.values(state.tasks), [state.tasks])\n\n return {\n data: tasksAsArray,\n dispatch,\n error,\n isLoading,\n }\n}\n","import debounce from 'lodash-es/debounce.js'\nimport {useMemo, useState} from 'react'\nimport {TasksContext} from 'sanity/_singletons'\n\nimport {useTasksStore} from '../../store'\nimport {type ActiveDocument, type TasksContextValue} from './types'\n\ninterface TasksProviderProps {\n children: React.ReactNode\n}\n\nconst EMPTY_ARRAY: [] = []\n\n/**\n * @internal\n */\nexport function TasksProvider(props: TasksProviderProps) {\n const {children} = props\n const [activeDocument, setActiveDocument] = useState<ActiveDocument | null>(null)\n const {data = EMPTY_ARRAY, isLoading} = useTasksStore({})\n\n // This change is debounced to wait until the next document loads if we are switching between documents.\n const debouncedSetActiveDocument = useMemo(() => debounce(setActiveDocument, 1000), [])\n\n const value: TasksContextValue = useMemo(\n () => ({\n activeDocument,\n setActiveDocument: debouncedSetActiveDocument,\n isLoading,\n data: data ?? [],\n }),\n [activeDocument, data, isLoading, debouncedSetActiveDocument],\n )\n\n return <TasksContext.Provider value={value}>{children}</TasksContext.Provider>\n}\n","import {TasksUpsellContext} from 'sanity/_singletons'\n\nimport {getDialogPropsFromContext, useUpsellContext} from '../../../hooks/useUpsellContext'\nimport {UpsellDialog} from '../../../studio/upsell/UpsellDialog'\n\n/**\n * @beta\n * @hidden\n */\nexport function TasksUpsellProvider(props: {children: React.ReactNode}) {\n const contextValue = useUpsellContext({\n dataUri: '/journey/tasks',\n feature: 'tasks',\n })\n\n return (\n <TasksUpsellContext.Provider value={contextValue}>\n {props.children}\n <UpsellDialog {...getDialogPropsFromContext(contextValue)} />\n </TasksUpsellContext.Provider>\n )\n}\n","import {type LayoutProps} from '../../config'\nimport {AddonDatasetProvider} from '../../studio'\nimport {\n TasksEnabledProvider,\n TasksNavigationProvider,\n TasksProvider,\n TasksUpsellProvider,\n useTasksEnabled,\n} from '../context'\n\nconst TasksStudioLayoutInner = (props: LayoutProps) => {\n const {enabled, mode} = useTasksEnabled()\n\n if (!enabled) {\n return props.renderDefault(props)\n }\n\n const children = (\n <TasksProvider>\n <TasksNavigationProvider>{props.renderDefault(props)}</TasksNavigationProvider>\n </TasksProvider>\n )\n\n if (mode === 'upsell') {\n return (\n <AddonDatasetProvider>\n <TasksUpsellProvider>{children}</TasksUpsellProvider>\n </AddonDatasetProvider>\n )\n }\n\n return <AddonDatasetProvider>{children}</AddonDatasetProvider>\n}\n\nexport function TasksStudioLayout(props: LayoutProps) {\n return (\n <TasksEnabledProvider>\n <TasksStudioLayoutInner {...props} />\n </TasksEnabledProvider>\n )\n}\n"],"names":["TasksEnabledProvider","t0","$","_c","children","enabled","isLoading","error","useFeatureEnabled","FEATURES","sanityTasks","isWorkspaceEnabled","useWorkspace","tasks","t1","bb0","t2","for","mode","t3","value","initialState","viewMode","selectedTask","activeTabId","duplicateTaskValues","isOpen","reducer","state","action","type","payload","uuid","id","TasksNavigationProvider","dispatch","useReducer","router","useRouter","toast","useToast","telemetry","useTelemetry","Symbol","bb2","setViewMode","tabId","setActiveTab","navigate","stickyParams","TASKS_SIDEBAR_SEARCH_PARAM","TASKS_VIEW_MODE_SEARCH_PARAM","TASKS_SELECTED_TASK_SEARCH_PARAM","handleCloseTasks","t4","handleOpenTasks","t5","url","URL","window","location","href","searchParams","set","navigator","clipboard","writeText","toString","then","log","TaskLinkCopied","catch","push","closable","status","title","handleCopyLinkToTask","sidebar","viewMode_0","t6","t7","TaskLinkOpened","useEffect","t8","t9","createTasksSet","reduce","acc","task","_id","tasksReducer","tasksById","nextTaskResult","nextTaskValue","nextTask","_state","undefined","_createdAt","Date","toISOString","_","restTasks","updatedTask","INITIAL_STATE","LISTEN_OPTIONS","events","includeResult","visibility","includeAllVersions","tag","SORT_FIELD","SORT_ORDER","QUERY_FILTERS","QUERY_PROJECTION","QUERY_SORT_ORDER","QUERY","join","useTasksStore","opts","client","useAddonDataset","documentId","setIsLoading","useState","setError","getPublishedId","params","res","fetch","err","initialFetch","event","transition","result","handleListenerEvent","of","observable","err_0","listen","pipe","catchError","listener$","sub","subscribe","unsubscribe","Object","values","tasksAsArray","data","EMPTY_ARRAY","TasksProvider","props","activeDocument","setActiveDocument","debounce","debouncedSetActiveDocument","TasksUpsellProvider","dataUri","feature","contextValue","useUpsellContext","getDialogPropsFromContext","TasksStudioLayoutInner","useTasksEnabled","renderDefault","TasksStudioLayout"],"mappings":"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"}
|