slice-machine-ui 2.17.3-beta.9 → 2.18.1-alpha.jp-unauthorized-error.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/out/404.html +1 -1
- package/out/_next/static/9KQ-HaPBlpfn5ByEJstJh/_buildManifest.js +1 -0
- package/out/_next/static/chunks/04ad993f.d7f986af0f739cc9.js +28 -0
- package/out/_next/static/chunks/{248-6f20227ad4764216.js → 248-bdbfde18c5a04eae.js} +1 -1
- package/out/_next/static/chunks/{34-6c3125e6f01c62c7.js → 34-8d9d9b2944824750.js} +1 -1
- package/out/_next/static/chunks/{489-a42bd4eeb1350d97.js → 489-6edb99e269996dd1.js} +1 -1
- package/out/_next/static/chunks/50-586dc7ab5e584e76.js +1 -0
- package/out/_next/static/chunks/630-bb6e3db525588f16.js +1 -0
- package/out/_next/static/chunks/{647-7b9b5aa9468f9e4b.js → 647-4379a741c8d85d9e.js} +1 -1
- package/out/_next/static/chunks/{907-a42dc5698d5dc000.js → 907-445266211c48b1a5.js} +1 -1
- package/out/_next/static/chunks/pages/{_app-13d39ac1e1c9aa27.js → _app-48d0855c9b0fc51c.js} +220 -222
- package/out/_next/static/chunks/pages/{changelog-98836c22c6a40c5d.js → changelog-21b960abba5abf71.js} +1 -1
- package/out/_next/static/chunks/pages/{changes-2bd69f3877d60b26.js → changes-bdfa50eadb1e5a42.js} +1 -1
- package/out/_next/static/chunks/pages/custom-types/{[customTypeId]-4024560ca59ad2be.js → [customTypeId]-7102c23f96cd1768.js} +1 -1
- package/out/_next/static/chunks/pages/{labs-ad7f36c6f544c1a8.js → labs-d79597003a1ff74e.js} +1 -1
- package/out/_next/static/chunks/pages/page-types/{[pageTypeId]-0d2416da0958eb40.js → [pageTypeId]-d4bc920a5efffa0a.js} +1 -1
- package/out/_next/static/chunks/pages/slices/[lib]/[sliceName]/[variation]/{simulator-0ecd552897e61e29.js → simulator-b127d948a17968d3.js} +1 -1
- package/out/_next/static/chunks/pages/slices/[lib]/[sliceName]/{[variation]-8b6e7854cb3466d4.js → [variation]-98f85d5fb8d5c704.js} +1 -1
- package/out/_next/static/chunks/pages/{slices-fe1bb16ff3020762.js → slices-046e5e978ffc3a42.js} +1 -1
- package/out/_next/static/chunks/webpack-e0c07a2fe4908d81.js +1 -0
- package/out/_next/static/css/303dad78be1eb854.css +1 -0
- package/out/changelog.html +1 -1
- package/out/changes.html +1 -1
- package/out/custom-types/[customTypeId].html +1 -1
- package/out/custom-types.html +1 -1
- package/out/index.html +1 -1
- package/out/labs.html +1 -1
- package/out/page-types/[pageTypeId].html +1 -1
- package/out/slices/[lib]/[sliceName]/[variation]/simulator.html +1 -1
- package/out/slices/[lib]/[sliceName]/[variation].html +1 -1
- package/out/slices.html +1 -1
- package/package.json +7 -7
- package/src/apiClient.ts +1 -1
- package/src/domain/fields.ts +7 -7
- package/src/features/auth/LogoutButton.tsx +56 -0
- package/src/features/builder/AddFieldDropdown.tsx +2 -2
- package/src/features/environments/actions/getActiveEnvironment.ts +2 -8
- package/src/features/environments/useActiveEnvironment.ts +8 -1
- package/src/features/environments/useEnvironments.ts +8 -1
- package/src/legacy/components/AppLayout/index.tsx +12 -1
- package/src/legacy/components/ListItem/Header.tsx +18 -12
- package/src/legacy/components/ListItem/index.tsx +1 -0
- package/src/legacy/components/LoginModal/index.tsx +11 -3
- package/src/legacy/components/Navigation/Environment.tsx +2 -10
- package/src/legacy/components/Navigation/SideNavEnvironmentSelector/SideNavEnvironmentSelector.tsx +8 -0
- package/src/legacy/lib/builders/common/EditModal/index.jsx +3 -10
- package/src/legacy/lib/models/common/widgets/Boolean/index.ts +3 -0
- package/src/legacy/lib/models/common/widgets/Color/index.ts +3 -0
- package/src/legacy/lib/models/common/widgets/ContentRelationship/index.ts +3 -0
- package/src/legacy/lib/models/common/widgets/Date/index.ts +3 -0
- package/src/legacy/lib/models/common/widgets/Embed/index.ts +3 -0
- package/src/legacy/lib/models/common/widgets/GeoPoint/index.ts +3 -0
- package/src/legacy/lib/models/common/widgets/Group/createGroupWidget.ts +2 -0
- package/src/legacy/lib/models/common/widgets/Image/index.ts +3 -0
- package/src/legacy/lib/models/common/widgets/Link/index.ts +3 -0
- package/src/legacy/lib/models/common/widgets/LinkToMedia/index.ts +2 -0
- package/src/legacy/lib/models/common/widgets/Number/index.ts +3 -0
- package/src/legacy/lib/models/common/widgets/Select/index.ts +3 -0
- package/src/legacy/lib/models/common/widgets/StructuredText/index.ts +3 -0
- package/src/legacy/lib/models/common/widgets/Table/index.ts +3 -0
- package/src/legacy/lib/models/common/widgets/Text/index.ts +3 -0
- package/src/legacy/lib/models/common/widgets/Timestamp/index.ts +3 -0
- package/src/legacy/lib/models/common/widgets/UID/index.ts +3 -0
- package/src/legacy/lib/models/common/widgets/Widget.ts +1 -0
- package/out/_next/static/UBLEqMkM94kXQpW0VSAQo/_buildManifest.js +0 -1
- package/out/_next/static/chunks/33641354.3864aefb6106ae71.js +0 -28
- package/out/_next/static/chunks/44-a2056f993381ad0f.js +0 -1
- package/out/_next/static/chunks/630-799c128fd87fa645.js +0 -1
- package/out/_next/static/chunks/webpack-b3522fdebabf510a.js +0 -1
- package/out/_next/static/css/cc9b10286400c2b9.css +0 -1
- /package/out/_next/static/{UBLEqMkM94kXQpW0VSAQo → 9KQ-HaPBlpfn5ByEJstJh}/_ssgManifest.js +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "slice-machine-ui",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.18.1-alpha.jp-unauthorized-error.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "A visual builder for your Slice Models with all the tools you need to generate data models and mock CMS content locally.",
|
|
6
6
|
"repository": {
|
|
@@ -35,16 +35,16 @@
|
|
|
35
35
|
"start-slicemachine": "./bin/start-slicemachine.cjs"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@slicemachine/manager": "0.25.
|
|
39
|
-
"start-slicemachine": "0.12.
|
|
38
|
+
"@slicemachine/manager": "0.25.3-alpha.jp-unauthorized-error.1",
|
|
39
|
+
"start-slicemachine": "0.12.61-alpha.jp-unauthorized-error.1"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@emotion/react": "11.11.1",
|
|
43
43
|
"@extractus/oembed-extractor": "3.1.8",
|
|
44
44
|
"@prismicio/client": "7.17.0",
|
|
45
|
-
"@prismicio/editor-fields": "0.4.
|
|
46
|
-
"@prismicio/editor-support": "0.4.
|
|
47
|
-
"@prismicio/editor-ui": "0.4.
|
|
45
|
+
"@prismicio/editor-fields": "0.4.87",
|
|
46
|
+
"@prismicio/editor-support": "0.4.87",
|
|
47
|
+
"@prismicio/editor-ui": "0.4.87",
|
|
48
48
|
"@prismicio/mock": "0.7.1",
|
|
49
49
|
"@prismicio/mocks": "2.14.0",
|
|
50
50
|
"@prismicio/simulator": "0.1.4",
|
|
@@ -137,5 +137,5 @@
|
|
|
137
137
|
"yup": "0.32.11",
|
|
138
138
|
"zod": "3.23.8"
|
|
139
139
|
},
|
|
140
|
-
"stableVersion": "2.
|
|
140
|
+
"stableVersion": "2.18.0"
|
|
141
141
|
}
|
package/src/apiClient.ts
CHANGED
|
@@ -163,7 +163,7 @@ export const pushChanges: SliceMachineManagerClient["prismicRepository"]["pushCh
|
|
|
163
163
|
|
|
164
164
|
/** Auth Routes * */
|
|
165
165
|
|
|
166
|
-
export const
|
|
166
|
+
export const clearAuth = async (): Promise<void> => {
|
|
167
167
|
return await managerClient.user.logout();
|
|
168
168
|
};
|
|
169
169
|
|
package/src/domain/fields.ts
CHANGED
|
@@ -92,7 +92,7 @@ export const imageField: NestableField = {
|
|
|
92
92
|
type: "Image",
|
|
93
93
|
};
|
|
94
94
|
|
|
95
|
-
export const
|
|
95
|
+
export const linkField: NestableField = {
|
|
96
96
|
name: "Link",
|
|
97
97
|
description: "A link to a website, asset, or document.",
|
|
98
98
|
icon: "link",
|
|
@@ -111,8 +111,8 @@ export const contentRelationshipField: NestableField = {
|
|
|
111
111
|
variant: "ContentRelationship",
|
|
112
112
|
};
|
|
113
113
|
|
|
114
|
-
export const
|
|
115
|
-
name: "Link
|
|
114
|
+
export const linkToMediaField: NestableField = {
|
|
115
|
+
name: "Link to Media",
|
|
116
116
|
description: "A link to a media asset.",
|
|
117
117
|
icon: "attachFile",
|
|
118
118
|
thumbnail:
|
|
@@ -182,8 +182,8 @@ export const nestableFields: NestableField[] = [
|
|
|
182
182
|
booleanField,
|
|
183
183
|
numberField,
|
|
184
184
|
selectField,
|
|
185
|
-
|
|
186
|
-
|
|
185
|
+
linkField,
|
|
186
|
+
linkToMediaField,
|
|
187
187
|
colorField,
|
|
188
188
|
dateField,
|
|
189
189
|
tableField,
|
|
@@ -197,7 +197,7 @@ export const nestableFields: NestableField[] = [
|
|
|
197
197
|
* UID
|
|
198
198
|
*/
|
|
199
199
|
|
|
200
|
-
export const
|
|
200
|
+
export const uidField: UIDField = {
|
|
201
201
|
name: "UID",
|
|
202
202
|
description: "Unique Identifier",
|
|
203
203
|
icon: "tag",
|
|
@@ -230,4 +230,4 @@ export const groupFields: GroupField[] = [groupField, nestedGroupField];
|
|
|
230
230
|
* All fields
|
|
231
231
|
*/
|
|
232
232
|
|
|
233
|
-
export const fields = [...nestableFields,
|
|
233
|
+
export const fields = [...nestableFields, uidField, ...groupFields];
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Button, Icon, IconButton, Tooltip } from "@prismicio/editor-ui";
|
|
2
|
+
import * as Sentry from "@sentry/nextjs";
|
|
3
|
+
import { ReactNode } from "react";
|
|
4
|
+
|
|
5
|
+
import { clearAuth as managerLogout, getState } from "@/apiClient";
|
|
6
|
+
import { invalidateActiveEnvironmentData } from "@/features/environments/useActiveEnvironment";
|
|
7
|
+
import { invalidateEnvironmentsData } from "@/features/environments/useEnvironments";
|
|
8
|
+
import useSliceMachineActions from "@/modules/useSliceMachineActions";
|
|
9
|
+
|
|
10
|
+
interface LogoutButtonProps {
|
|
11
|
+
children?: ReactNode;
|
|
12
|
+
onLogoutSuccess?: () => void;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function LogoutButton(props: LogoutButtonProps) {
|
|
16
|
+
const { children, onLogoutSuccess } = props;
|
|
17
|
+
|
|
18
|
+
const { refreshState } = useSliceMachineActions();
|
|
19
|
+
|
|
20
|
+
async function onClick() {
|
|
21
|
+
await managerLogout();
|
|
22
|
+
|
|
23
|
+
const serverState = await getState();
|
|
24
|
+
refreshState(serverState);
|
|
25
|
+
|
|
26
|
+
Sentry.setUser({ id: serverState.env.shortId });
|
|
27
|
+
|
|
28
|
+
// refresh queries to update the UI
|
|
29
|
+
invalidateEnvironmentsData();
|
|
30
|
+
invalidateActiveEnvironmentData();
|
|
31
|
+
|
|
32
|
+
onLogoutSuccess?.();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (children !== undefined) {
|
|
36
|
+
return (
|
|
37
|
+
<Button
|
|
38
|
+
onClick={() => void onClick()}
|
|
39
|
+
renderEndIcon={() => <Icon name="logout" size="extraSmall" />}
|
|
40
|
+
color="grey"
|
|
41
|
+
>
|
|
42
|
+
{children}
|
|
43
|
+
</Button>
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return (
|
|
48
|
+
<Tooltip content="Log out" side="right">
|
|
49
|
+
<IconButton
|
|
50
|
+
icon="logout"
|
|
51
|
+
onClick={() => void onClick()}
|
|
52
|
+
hiddenLabel="Log out"
|
|
53
|
+
/>
|
|
54
|
+
</Tooltip>
|
|
55
|
+
);
|
|
56
|
+
}
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
FieldVariant,
|
|
19
19
|
groupField,
|
|
20
20
|
nestableFields,
|
|
21
|
-
|
|
21
|
+
uidField,
|
|
22
22
|
} from "@/domain/fields";
|
|
23
23
|
|
|
24
24
|
export type AddFieldDropdownProps = {
|
|
@@ -47,7 +47,7 @@ export function AddFieldDropdown(props: AddFieldDropdownProps) {
|
|
|
47
47
|
(field) =>
|
|
48
48
|
nestableFields.some(
|
|
49
49
|
(nestableField) => nestableField.name === field.name,
|
|
50
|
-
) || field.name ===
|
|
50
|
+
) || field.name === uidField.name,
|
|
51
51
|
);
|
|
52
52
|
const groupFieldToRender = fields.find(
|
|
53
53
|
(field) => field.name === groupField.name,
|
|
@@ -5,10 +5,6 @@ import {
|
|
|
5
5
|
|
|
6
6
|
import { managerClient } from "@/managerClient";
|
|
7
7
|
|
|
8
|
-
type GetActiveEnvironmentArgs = {
|
|
9
|
-
retried?: boolean;
|
|
10
|
-
};
|
|
11
|
-
|
|
12
8
|
type GetActiveEnvironmentReturnType =
|
|
13
9
|
| {
|
|
14
10
|
activeEnvironment: Environment;
|
|
@@ -20,10 +16,8 @@ type GetActiveEnvironmentReturnType =
|
|
|
20
16
|
};
|
|
21
17
|
|
|
22
18
|
export async function getActiveEnvironment(
|
|
23
|
-
|
|
19
|
+
retried = false,
|
|
24
20
|
): Promise<GetActiveEnvironmentReturnType> {
|
|
25
|
-
const { retried = false } = args ?? {};
|
|
26
|
-
|
|
27
21
|
try {
|
|
28
22
|
const activeEnvironmentResult =
|
|
29
23
|
await managerClient.project.fetchActiveEnvironment();
|
|
@@ -41,7 +35,7 @@ export async function getActiveEnvironment(
|
|
|
41
35
|
await managerClient.project.updateEnvironment({ environment: undefined });
|
|
42
36
|
|
|
43
37
|
// Call recursively with isRetry=true to prevent infinite loop if it fails again and again.
|
|
44
|
-
return await getActiveEnvironment(
|
|
38
|
+
return await getActiveEnvironment(true);
|
|
45
39
|
}
|
|
46
40
|
|
|
47
41
|
return { error };
|
|
@@ -1,7 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
invalidateFetcherData,
|
|
3
|
+
useRequest,
|
|
4
|
+
} from "@prismicio/editor-support/Suspense";
|
|
2
5
|
|
|
3
6
|
import { getActiveEnvironment } from "./actions/getActiveEnvironment";
|
|
4
7
|
|
|
8
|
+
export function invalidateActiveEnvironmentData() {
|
|
9
|
+
invalidateFetcherData(getActiveEnvironment);
|
|
10
|
+
}
|
|
11
|
+
|
|
5
12
|
export function useActiveEnvironment() {
|
|
6
13
|
return useRequest(getActiveEnvironment, []);
|
|
7
14
|
}
|
|
@@ -1,7 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
invalidateFetcherData,
|
|
3
|
+
useRequest,
|
|
4
|
+
} from "@prismicio/editor-support/Suspense";
|
|
2
5
|
|
|
3
6
|
import { getEnvironments } from "./actions/getEnvironments";
|
|
4
7
|
|
|
8
|
+
export function invalidateEnvironmentsData() {
|
|
9
|
+
invalidateFetcherData(getEnvironments);
|
|
10
|
+
}
|
|
11
|
+
|
|
5
12
|
export function useEnvironments() {
|
|
6
13
|
return useRequest(getEnvironments, []);
|
|
7
14
|
}
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
Button,
|
|
8
8
|
ButtonGroup,
|
|
9
9
|
} from "@prismicio/editor-ui";
|
|
10
|
+
import { isUnauthorizedError } from "@slicemachine/manager/client";
|
|
10
11
|
import { useRouter } from "next/router";
|
|
11
12
|
import { FC, PropsWithChildren, Suspense } from "react";
|
|
12
13
|
|
|
@@ -18,6 +19,7 @@ import {
|
|
|
18
19
|
PageLayoutPane,
|
|
19
20
|
} from "@/components/PageLayout";
|
|
20
21
|
import { ErrorBoundary } from "@/ErrorBoundary";
|
|
22
|
+
import { LogoutButton } from "@/features/auth/LogoutButton";
|
|
21
23
|
import { useActiveEnvironment } from "@/features/environments/useActiveEnvironment";
|
|
22
24
|
import { Navigation } from "@/features/navigation/Navigation";
|
|
23
25
|
|
|
@@ -44,7 +46,16 @@ export const AppLayout: FC<PropsWithChildren> = ({
|
|
|
44
46
|
/>
|
|
45
47
|
<BlankSlateTitle>Failed to load Slice Machine</BlankSlateTitle>
|
|
46
48
|
<BlankSlateDescription>
|
|
47
|
-
{
|
|
49
|
+
<Box alignItems="center" flexDirection="column" gap={16}>
|
|
50
|
+
{JSON.stringify(error)}
|
|
51
|
+
{isUnauthorizedError(error) && (
|
|
52
|
+
<LogoutButton
|
|
53
|
+
onLogoutSuccess={() => window.location.reload()}
|
|
54
|
+
>
|
|
55
|
+
Log out
|
|
56
|
+
</LogoutButton>
|
|
57
|
+
)}
|
|
58
|
+
</Box>
|
|
48
59
|
</BlankSlateDescription>
|
|
49
60
|
</BlankSlate>
|
|
50
61
|
</Box>
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Box, Tooltip } from "@prismicio/editor-ui";
|
|
1
2
|
import * as CSS from "csstype";
|
|
2
3
|
import { IconType } from "react-icons";
|
|
3
4
|
import { Flex, Text, Theme } from "theme-ui";
|
|
@@ -9,6 +10,7 @@ interface ItemHeaderProps {
|
|
|
9
10
|
sliceFieldName: string | undefined;
|
|
10
11
|
theme: Theme;
|
|
11
12
|
WidgetIcon: IconType;
|
|
13
|
+
widgetIconTooltip: string;
|
|
12
14
|
}
|
|
13
15
|
|
|
14
16
|
const ItemHeader: React.FC<ItemHeaderProps> = ({
|
|
@@ -16,20 +18,24 @@ const ItemHeader: React.FC<ItemHeaderProps> = ({
|
|
|
16
18
|
sliceFieldName,
|
|
17
19
|
theme,
|
|
18
20
|
WidgetIcon,
|
|
21
|
+
widgetIconTooltip,
|
|
19
22
|
}) => (
|
|
20
23
|
<Flex sx={{ alignItems: "center", position: "relative" }}>
|
|
21
|
-
<
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
24
|
+
<Tooltip content={widgetIconTooltip} sideOffset={2} disableHoverableContent>
|
|
25
|
+
<Box margin={{ right: 8 }}>
|
|
26
|
+
<WidgetIcon
|
|
27
|
+
size={28}
|
|
28
|
+
style={{
|
|
29
|
+
color: theme.colors?.primary as CSS.Property.Color,
|
|
30
|
+
borderRadius: "4px",
|
|
31
|
+
padding: "4px",
|
|
32
|
+
border: "2px solid",
|
|
33
|
+
borderColor: theme.colors?.primary as CSS.Property.Color,
|
|
34
|
+
flexShrink: 0,
|
|
35
|
+
}}
|
|
36
|
+
/>
|
|
37
|
+
</Box>
|
|
38
|
+
</Tooltip>
|
|
33
39
|
<TextWithTooltip
|
|
34
40
|
text={text}
|
|
35
41
|
as="p"
|
|
@@ -114,6 +114,7 @@ function ListItem<F extends TabField, S extends AnyObjectSchema>({
|
|
|
114
114
|
renderFieldAccessor && renderFieldAccessor(key)
|
|
115
115
|
}
|
|
116
116
|
WidgetIcon={widget.Meta.icon}
|
|
117
|
+
widgetIconTooltip={widget.label}
|
|
117
118
|
/>
|
|
118
119
|
<Flex sx={{ flex: "0 0 auto" }}>
|
|
119
120
|
{shouldDisplayRepeatableBadge && (
|
|
@@ -13,8 +13,10 @@ import {
|
|
|
13
13
|
Text,
|
|
14
14
|
} from "theme-ui";
|
|
15
15
|
|
|
16
|
-
import { checkAuthStatus,
|
|
16
|
+
import { checkAuthStatus, clearAuth, getState } from "@/apiClient";
|
|
17
17
|
import { getActiveEnvironment } from "@/features/environments/actions/getActiveEnvironment";
|
|
18
|
+
import { invalidateActiveEnvironmentData } from "@/features/environments/useActiveEnvironment";
|
|
19
|
+
import { invalidateEnvironmentsData } from "@/features/environments/useEnvironments";
|
|
18
20
|
import { useAutoSync } from "@/features/sync/AutoSyncProvider";
|
|
19
21
|
import { getUnSyncedChanges } from "@/features/sync/getUnSyncChanges";
|
|
20
22
|
import SliceMachineModal from "@/legacy/components/SliceMachineModal";
|
|
@@ -50,7 +52,7 @@ const LoginModal: React.FunctionComponent = () => {
|
|
|
50
52
|
}),
|
|
51
53
|
);
|
|
52
54
|
const { syncChanges } = useAutoSync();
|
|
53
|
-
const { closeModals, startLoadingLogin, stopLoadingLogin } =
|
|
55
|
+
const { closeModals, startLoadingLogin, stopLoadingLogin, refreshState } =
|
|
54
56
|
useSliceMachineActions();
|
|
55
57
|
|
|
56
58
|
const prismicBase = preferWroomBase(env.manifest.apiEndpoint);
|
|
@@ -64,7 +66,7 @@ const LoginModal: React.FunctionComponent = () => {
|
|
|
64
66
|
|
|
65
67
|
try {
|
|
66
68
|
startLoadingLogin();
|
|
67
|
-
await
|
|
69
|
+
await clearAuth();
|
|
68
70
|
window.open(loginRedirectUrl, "_blank");
|
|
69
71
|
await startPolling<CheckAuthStatusResponse, ValidAuthStatus>(
|
|
70
72
|
checkAuthStatus,
|
|
@@ -76,11 +78,17 @@ const LoginModal: React.FunctionComponent = () => {
|
|
|
76
78
|
60,
|
|
77
79
|
);
|
|
78
80
|
|
|
81
|
+
// refresh queries to update the UI
|
|
82
|
+
invalidateEnvironmentsData();
|
|
83
|
+
invalidateActiveEnvironmentData();
|
|
84
|
+
|
|
79
85
|
toast.success("Logged in");
|
|
80
86
|
stopLoadingLogin();
|
|
81
87
|
closeModals();
|
|
82
88
|
|
|
83
89
|
const serverState = await getState();
|
|
90
|
+
refreshState(serverState);
|
|
91
|
+
|
|
84
92
|
const slices = normalizeFrontendSlices(
|
|
85
93
|
serverState.libraries,
|
|
86
94
|
serverState.remoteSlices,
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Environment as EnvironmentType,
|
|
3
3
|
isUnauthenticatedError,
|
|
4
|
-
isUnauthorizedError,
|
|
5
4
|
} from "@slicemachine/manager/client";
|
|
6
5
|
import { useState } from "react";
|
|
7
6
|
|
|
@@ -98,17 +97,10 @@ export function Environment() {
|
|
|
98
97
|
);
|
|
99
98
|
}
|
|
100
99
|
|
|
101
|
-
if (
|
|
102
|
-
isUnauthenticatedError(useEnvironmentsError) ||
|
|
103
|
-
isUnauthorizedError(useEnvironmentsError)
|
|
104
|
-
) {
|
|
100
|
+
if (isUnauthenticatedError(useEnvironmentsError)) {
|
|
105
101
|
return (
|
|
106
102
|
<SideNavEnvironmentSelector
|
|
107
|
-
variant=
|
|
108
|
-
isUnauthenticatedError(useEnvironmentsError)
|
|
109
|
-
? "unauthenticated"
|
|
110
|
-
: "unauthorized"
|
|
111
|
-
}
|
|
103
|
+
variant="unauthenticated"
|
|
112
104
|
onLogInClick={() => openLoginModal()}
|
|
113
105
|
/>
|
|
114
106
|
);
|
package/src/legacy/components/Navigation/SideNavEnvironmentSelector/SideNavEnvironmentSelector.tsx
CHANGED
|
@@ -17,7 +17,9 @@ import * as VisuallyHidden from "@radix-ui/react-visually-hidden";
|
|
|
17
17
|
import type { Environment } from "@slicemachine/manager/client";
|
|
18
18
|
import { clsx } from "clsx";
|
|
19
19
|
import type { FC, ReactNode } from "react";
|
|
20
|
+
import { toast } from "react-toastify";
|
|
20
21
|
|
|
22
|
+
import { LogoutButton } from "@/features/auth/LogoutButton";
|
|
21
23
|
import { LoginIcon } from "@/icons/LoginIcon";
|
|
22
24
|
import { LogoIcon } from "@/icons/LogoIcon";
|
|
23
25
|
|
|
@@ -138,6 +140,12 @@ export const SideNavEnvironmentSelector: FC<SideNavEnvironmentSelectorProps> = (
|
|
|
138
140
|
}
|
|
139
141
|
/>
|
|
140
142
|
) : undefined}
|
|
143
|
+
|
|
144
|
+
{variant === "default" && (
|
|
145
|
+
<LogoutButton
|
|
146
|
+
onLogoutSuccess={() => toast.success("Logged out")}
|
|
147
|
+
/>
|
|
148
|
+
)}
|
|
141
149
|
</Box>
|
|
142
150
|
</>
|
|
143
151
|
)}
|
|
@@ -60,6 +60,7 @@ const EditModal = ({ close, data, fields, onSave, zoneType }) => {
|
|
|
60
60
|
FormFields,
|
|
61
61
|
Form: CustomForm,
|
|
62
62
|
schema: widgetSchema,
|
|
63
|
+
label: widgetLabel,
|
|
63
64
|
} = maybeWidget;
|
|
64
65
|
|
|
65
66
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
@@ -163,15 +164,7 @@ const EditModal = ({ close, data, fields, onSave, zoneType }) => {
|
|
|
163
164
|
>
|
|
164
165
|
{(props) => {
|
|
165
166
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-assignment
|
|
166
|
-
const {
|
|
167
|
-
values: {
|
|
168
|
-
id,
|
|
169
|
-
config: { label },
|
|
170
|
-
},
|
|
171
|
-
isValid,
|
|
172
|
-
isSubmitting,
|
|
173
|
-
initialValues,
|
|
174
|
-
} = props;
|
|
167
|
+
const { isValid, isSubmitting, initialValues } = props;
|
|
175
168
|
|
|
176
169
|
// eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
|
|
177
170
|
const fieldModelTabContent = CustomForm ? (
|
|
@@ -226,7 +219,7 @@ const EditModal = ({ close, data, fields, onSave, zoneType }) => {
|
|
|
226
219
|
<ItemHeader
|
|
227
220
|
theme={theme}
|
|
228
221
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/strict-boolean-expressions
|
|
229
|
-
text={
|
|
222
|
+
text={widgetLabel}
|
|
230
223
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
231
224
|
WidgetIcon={WidgetIcon}
|
|
232
225
|
/>
|
|
@@ -2,6 +2,8 @@ import { BooleanField } from "@prismicio/types-internal/lib/customtypes/widgets/
|
|
|
2
2
|
import { MdOutlineToggleOff } from "react-icons/md";
|
|
3
3
|
import * as yup from "yup";
|
|
4
4
|
|
|
5
|
+
import { booleanField } from "@/domain/fields";
|
|
6
|
+
|
|
5
7
|
import { createValidationSchema } from "../../../../forms";
|
|
6
8
|
import { DefaultFields } from "../../../../forms/defaults";
|
|
7
9
|
import { CheckBox, Input } from "../../../../forms/fields";
|
|
@@ -68,4 +70,5 @@ export const BooleanWidget: Widget<BooleanField, typeof schema> = {
|
|
|
68
70
|
Meta,
|
|
69
71
|
schema,
|
|
70
72
|
FormFields,
|
|
73
|
+
label: booleanField.name,
|
|
71
74
|
};
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Color } from "@prismicio/types-internal/lib/customtypes/widgets/nestable";
|
|
2
2
|
import { MdOutlineColorLens } from "react-icons/md";
|
|
3
3
|
|
|
4
|
+
import { colorField } from "@/domain/fields";
|
|
5
|
+
|
|
4
6
|
import { createDefaultWidgetValues } from "../../../../utils";
|
|
5
7
|
import { Widget } from "../Widget";
|
|
6
8
|
|
|
@@ -31,4 +33,5 @@ export const ColorWidget: Widget<Color, typeof schema> = {
|
|
|
31
33
|
TYPE_NAME,
|
|
32
34
|
schema,
|
|
33
35
|
Meta,
|
|
36
|
+
label: colorField.name,
|
|
34
37
|
};
|
|
@@ -2,6 +2,8 @@ import { Link } from "@prismicio/types-internal/lib/customtypes/widgets/nestable
|
|
|
2
2
|
import { MdSettingsEthernet } from "react-icons/md";
|
|
3
3
|
import * as yup from "yup";
|
|
4
4
|
|
|
5
|
+
import { contentRelationshipField } from "@/domain/fields";
|
|
6
|
+
|
|
5
7
|
import { linkConfigSchema } from "../Link";
|
|
6
8
|
import { Widget } from "../Widget";
|
|
7
9
|
import Form, { FormFields } from "./Form";
|
|
@@ -102,4 +104,5 @@ export const ContentRelationshipWidget: Widget<Link, typeof schema> = {
|
|
|
102
104
|
),
|
|
103
105
|
};
|
|
104
106
|
},
|
|
107
|
+
label: contentRelationshipField.name,
|
|
105
108
|
};
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Date } from "@prismicio/types-internal/lib/customtypes/widgets/nestable";
|
|
2
2
|
import { MdDateRange } from "react-icons/md";
|
|
3
3
|
|
|
4
|
+
import { dateField } from "@/domain/fields";
|
|
5
|
+
|
|
4
6
|
import { createDefaultWidgetValues } from "../../../../utils";
|
|
5
7
|
import { Widget } from "../Widget";
|
|
6
8
|
|
|
@@ -32,4 +34,5 @@ export const DateWidget: Widget<Date, typeof schema> = {
|
|
|
32
34
|
TYPE_NAME: "Date",
|
|
33
35
|
schema,
|
|
34
36
|
Meta,
|
|
37
|
+
label: dateField.name,
|
|
35
38
|
};
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Embed } from "@prismicio/types-internal/lib/customtypes/widgets/nestable";
|
|
2
2
|
import { MdCode } from "react-icons/md";
|
|
3
3
|
|
|
4
|
+
import { embedField } from "@/domain/fields";
|
|
5
|
+
|
|
4
6
|
import { createDefaultWidgetValues } from "../../../../utils";
|
|
5
7
|
import { Widget } from "../Widget";
|
|
6
8
|
|
|
@@ -32,4 +34,5 @@ export const EmbedWidget: Widget<Embed, typeof schema> = {
|
|
|
32
34
|
TYPE_NAME: "Embed",
|
|
33
35
|
schema,
|
|
34
36
|
Meta,
|
|
37
|
+
label: embedField.name,
|
|
35
38
|
};
|
|
@@ -2,6 +2,8 @@ import { GeoPoint } from "@prismicio/types-internal/lib/customtypes/widgets/nest
|
|
|
2
2
|
import { MdOutlinePlace } from "react-icons/md";
|
|
3
3
|
import * as yup from "yup";
|
|
4
4
|
|
|
5
|
+
import { geoPointField } from "@/domain/fields";
|
|
6
|
+
|
|
5
7
|
import { DefaultFields } from "../../../../forms/defaults";
|
|
6
8
|
import { Widget } from "../Widget";
|
|
7
9
|
|
|
@@ -52,4 +54,5 @@ export const GeoPointWidget: Widget<GeoPoint, typeof schema> = {
|
|
|
52
54
|
TYPE_NAME: "GeoPoint",
|
|
53
55
|
schema,
|
|
54
56
|
Meta,
|
|
57
|
+
label: geoPointField.name,
|
|
55
58
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { MdOutlineCreateNewFolder } from "react-icons/md";
|
|
2
2
|
import * as yup from "yup";
|
|
3
3
|
|
|
4
|
+
import { groupField } from "@/domain/fields";
|
|
4
5
|
import { TabField } from "@/legacy/lib/models/common/CustomType";
|
|
5
6
|
import {
|
|
6
7
|
type GroupSM,
|
|
@@ -76,5 +77,6 @@ export function createGroupWidget({
|
|
|
76
77
|
TYPE_NAME: "Group",
|
|
77
78
|
CUSTOM_NAME: customName,
|
|
78
79
|
hintItemName,
|
|
80
|
+
label: groupField.name,
|
|
79
81
|
};
|
|
80
82
|
}
|
|
@@ -2,6 +2,8 @@ import { Image } from "@prismicio/types-internal/lib/customtypes/widgets/nestabl
|
|
|
2
2
|
import { MdOutlineImage } from "react-icons/md";
|
|
3
3
|
import * as yup from "yup";
|
|
4
4
|
|
|
5
|
+
import { imageField } from "@/domain/fields";
|
|
6
|
+
|
|
5
7
|
import { createValidationSchema } from "../../../../forms";
|
|
6
8
|
import { removeProp } from "../../../../utils";
|
|
7
9
|
import { Widget } from "../Widget";
|
|
@@ -55,4 +57,5 @@ export const ImageWidget: Widget<Image, typeof schema> = {
|
|
|
55
57
|
}),
|
|
56
58
|
FormFields,
|
|
57
59
|
TYPE_NAME: "Image",
|
|
60
|
+
label: imageField.name,
|
|
58
61
|
};
|
|
@@ -2,6 +2,8 @@ import { Link } from "@prismicio/types-internal/lib/customtypes";
|
|
|
2
2
|
import { MdLink } from "react-icons/md";
|
|
3
3
|
import * as yup from "yup";
|
|
4
4
|
|
|
5
|
+
import { linkField } from "@/domain/fields";
|
|
6
|
+
|
|
5
7
|
import { Widget } from "../Widget";
|
|
6
8
|
import Form, { FormFields } from "./Form";
|
|
7
9
|
|
|
@@ -115,4 +117,5 @@ export const LinkWidget: Widget<Link, typeof schema> = {
|
|
|
115
117
|
},
|
|
116
118
|
}),
|
|
117
119
|
TYPE_NAME: "Link",
|
|
120
|
+
label: linkField.name,
|
|
118
121
|
};
|
|
@@ -2,6 +2,7 @@ import { Link } from "@prismicio/types-internal/lib/customtypes/widgets/nestable
|
|
|
2
2
|
import { MdAttachFile } from "react-icons/md";
|
|
3
3
|
import * as yup from "yup";
|
|
4
4
|
|
|
5
|
+
import { linkToMediaField } from "@/domain/fields";
|
|
5
6
|
import { linkConfigSchema } from "@/legacy/lib/models/common/widgets/Link";
|
|
6
7
|
|
|
7
8
|
import { Widget } from "../Widget";
|
|
@@ -45,4 +46,5 @@ export const LinkToMediaWidget: Widget<Link, typeof schema> = {
|
|
|
45
46
|
}),
|
|
46
47
|
TYPE_NAME: "Link",
|
|
47
48
|
CUSTOM_NAME: "LinkToMedia",
|
|
49
|
+
label: linkToMediaField.name,
|
|
48
50
|
};
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Number as PrismicNumber } from "@prismicio/types-internal/lib/customtypes/widgets/nestable";
|
|
2
2
|
import { MdOutlinePin } from "react-icons/md";
|
|
3
3
|
|
|
4
|
+
import { numberField } from "@/domain/fields";
|
|
5
|
+
|
|
4
6
|
import { createDefaultWidgetValues } from "../../../../utils";
|
|
5
7
|
import { Widget } from "../Widget";
|
|
6
8
|
|
|
@@ -32,4 +34,5 @@ export const NumberWidget: Widget<PrismicNumber, typeof schema> = {
|
|
|
32
34
|
TYPE_NAME: "Number",
|
|
33
35
|
schema,
|
|
34
36
|
Meta,
|
|
37
|
+
label: numberField.name,
|
|
35
38
|
};
|
|
@@ -2,6 +2,8 @@ import { Select } from "@prismicio/types-internal/lib/customtypes/widgets/nestab
|
|
|
2
2
|
import { MdOutlineArrowDropDownCircle } from "react-icons/md";
|
|
3
3
|
import * as yup from "yup";
|
|
4
4
|
|
|
5
|
+
import { selectField } from "@/domain/fields";
|
|
6
|
+
|
|
5
7
|
import { createValidationSchema } from "../../../../forms";
|
|
6
8
|
import { removeProp } from "../../../../utils";
|
|
7
9
|
import { Widget } from "../Widget";
|
|
@@ -45,4 +47,5 @@ export const SelectWidget: Widget<Select, typeof schema> = {
|
|
|
45
47
|
schema,
|
|
46
48
|
Meta,
|
|
47
49
|
TYPE_NAME: "Select",
|
|
50
|
+
label: selectField.name,
|
|
48
51
|
};
|
|
@@ -2,6 +2,8 @@ import { RichText } from "@prismicio/types-internal/lib/customtypes/widgets/nest
|
|
|
2
2
|
import { MdTextFields } from "react-icons/md";
|
|
3
3
|
import * as yup from "yup";
|
|
4
4
|
|
|
5
|
+
import { richTextField } from "@/domain/fields";
|
|
6
|
+
|
|
5
7
|
import { createValidationSchema } from "../../../../forms";
|
|
6
8
|
import { removeProp } from "../../../../utils";
|
|
7
9
|
import { Widget } from "../Widget";
|
|
@@ -55,4 +57,5 @@ export const StructuredTextWidget: Widget<RichText, typeof schema> = {
|
|
|
55
57
|
schema,
|
|
56
58
|
TYPE_NAME: "StructuredText",
|
|
57
59
|
Form,
|
|
60
|
+
label: richTextField.name,
|
|
58
61
|
};
|