andoncloud-widget-preview 1.5.0 → 1.5.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/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { SidePanelProps } from "andoncloud-sdk";
2
- import * as react from "react";
3
2
  import { BaseWidgetData, BaseWidgetSettings, FilterValues, WidgetProps } from "andoncloud-dashboard-toolkit";
3
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
4
4
  import { InitOptions } from "i18next";
5
5
 
6
6
  //#region src/types.d.ts
@@ -28,7 +28,7 @@ declare const WidgetPreview: <WD extends BaseWidgetData = BaseWidgetData, WS ext
28
28
  baseUrl,
29
29
  locales,
30
30
  ...contentProps
31
- }: WidgetPreviewProps<WD, WS>) => react.JSX.Element;
31
+ }: WidgetPreviewProps<WD, WS>) => react_jsx_runtime0.JSX.Element;
32
32
  //#endregion
33
33
  export { WidgetPreview, type WidgetPreviewProps };
34
34
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { App, Container, refreshUserData, registerTranslations, setLocale, sidePanelDefaultProps, useLoginStatus } from "andoncloud-sdk";
2
- import React$1, { useEffect, useState } from "react";
2
+ import { useEffect, useState } from "react";
3
3
  import { Box, Typography } from "@mui/material";
4
4
  import { DashboardFilters, WidgetCard, useGqlClients } from "andoncloud-dashboard-toolkit";
5
5
  import { useTranslation } from "react-i18next";
@@ -8,6 +8,7 @@ import "react-grid-layout/css/styles.css";
8
8
  import "react-resizable/css/styles.css";
9
9
  import ReactGridLayout, { useContainerWidth } from "react-grid-layout";
10
10
  import getUuid from "uuid-by-string";
11
+ import { jsx, jsxs } from "react/jsx-runtime";
11
12
  import { alpha } from "@mui/material/styles";
12
13
  //#endregion
13
14
  //#region src/locales/index.ts
@@ -32,44 +33,47 @@ const Dashboard = ({ apiUrl, lang, filters, widgetName, widgetDisplayName, getWi
32
33
  const { width, containerRef, mounted } = useContainerWidth();
33
34
  const [settingsModalOpened, setSettingsModalOpened] = useState(false);
34
35
  const widgetId = getUuid(widgetName);
35
- return /* @__PURE__ */ React$1.createElement(Box, { ref: containerRef }, mounted && /* @__PURE__ */ React$1.createElement(ReactGridLayout, {
36
- className: "layout",
37
- width,
38
- layout: [{
39
- i: widgetId,
40
- x: 0,
41
- y: 0,
42
- w: widgetWidth || 3,
43
- h: widgetHeight || 4
44
- }],
45
- dragConfig: { handle: ".draggable-handle" }
46
- }, status === "connected" && /* @__PURE__ */ React$1.createElement(WidgetCard, {
47
- key: widgetId,
48
- id: widgetId,
49
- Widget,
50
- title: widgetDisplayName(lang),
51
- getTitle: getWidgetTitle,
52
- customTitle: widgetCustomTitle,
53
- thumbnail: widgetThumbnail,
54
- url: apiUrl,
55
- lang,
56
- filters,
57
- requiredFeatures: widgetRequiredFeatures,
58
- extraPermissions: widgetExtraPermissions,
59
- openSettingsModal: settingsModalOpened,
60
- onSettingsModalOpened: () => setSettingsModalOpened(true),
61
- onSettingsModalClosed: () => setSettingsModalOpened(false),
62
- sidePanelOpened: sidePanelOpened || false,
63
- updateSidePanelProps,
64
- editMode,
65
- version: widgetVersion
66
- })));
36
+ return /* @__PURE__ */ jsx(Box, {
37
+ ref: containerRef,
38
+ children: mounted && /* @__PURE__ */ jsx(ReactGridLayout, {
39
+ className: "layout",
40
+ width,
41
+ layout: [{
42
+ i: widgetId,
43
+ x: 0,
44
+ y: 0,
45
+ w: widgetWidth || 3,
46
+ h: widgetHeight || 4
47
+ }],
48
+ dragConfig: { handle: ".draggable-handle" },
49
+ children: status === "connected" && /* @__PURE__ */ jsx(WidgetCard, {
50
+ id: widgetId,
51
+ Widget,
52
+ title: widgetDisplayName(lang),
53
+ getTitle: getWidgetTitle,
54
+ customTitle: widgetCustomTitle,
55
+ thumbnail: widgetThumbnail,
56
+ url: apiUrl,
57
+ lang,
58
+ filters,
59
+ requiredFeatures: widgetRequiredFeatures,
60
+ extraPermissions: widgetExtraPermissions,
61
+ openSettingsModal: settingsModalOpened,
62
+ onSettingsModalOpened: () => setSettingsModalOpened(true),
63
+ onSettingsModalClosed: () => setSettingsModalOpened(false),
64
+ sidePanelOpened: sidePanelOpened || false,
65
+ updateSidePanelProps,
66
+ editMode,
67
+ version: widgetVersion
68
+ }, widgetId)
69
+ })
70
+ });
67
71
  };
68
72
  //#endregion
69
73
  //#region src/components/Routing.tsx
70
74
  const routes = (isLoggedIn, { apiUrl, lang, filters, getWidgetTitle, widgetCustomTitle, widgetName, widgetDisplayName, widgetWidth, widgetHeight, widgetThumbnail, widgetRequiredFeatures, widgetExtraPermissions, widgetVersion, Widget, sidePanelOpened, updateSidePanelProps, editMode }) => [{
71
75
  path: "/",
72
- element: isLoggedIn ? /* @__PURE__ */ React$1.createElement(Dashboard, {
76
+ element: isLoggedIn ? /* @__PURE__ */ jsx(Dashboard, {
73
77
  apiUrl,
74
78
  lang,
75
79
  filters,
@@ -87,7 +91,7 @@ const routes = (isLoggedIn, { apiUrl, lang, filters, getWidgetTitle, widgetCusto
87
91
  sidePanelOpened,
88
92
  updateSidePanelProps,
89
93
  editMode
90
- }) : /* @__PURE__ */ React$1.createElement(Navigate, { to: "/login" })
94
+ }) : /* @__PURE__ */ jsx(Navigate, { to: "/login" })
91
95
  }];
92
96
  const Routing = (dashboardProps) => {
93
97
  const { status } = useLoginStatus();
@@ -156,66 +160,69 @@ const WidgetPreviewContent = ({ apiUrl, widgetName, widgetDisplayName, getWidget
156
160
  label: t("widgetPreview.changeLanguage"),
157
161
  action: () => setLocale(lang === "pl" ? "en" : "pl")
158
162
  }];
159
- const headerProps = {
160
- position: "fixed",
161
- leadingText: widgetDisplayName(lang),
162
- content: /* @__PURE__ */ React.createElement(Box, { sx: styles.filtersContainer }, /* @__PURE__ */ React.createElement(DashboardFilters, {
163
- initialValues: filters,
164
- onChange: setFilters,
165
- shifts,
166
- onFeatureRequest: handleFeatureRequest
167
- }), /* @__PURE__ */ React.createElement(Typography, {
168
- variant: "caption",
169
- sx: styles.filterDisclaimer
170
- }, t("widgetPreview.filterDisclaimer"))),
171
- navProps: { items: navItems },
172
- menuProps: {
173
- items: menuItems,
174
- buttonColor: "white"
175
- }
176
- };
177
- return /* @__PURE__ */ React.createElement(Container, {
178
- headerProps,
163
+ return /* @__PURE__ */ jsx(Container, {
164
+ headerProps: {
165
+ position: "fixed",
166
+ leadingText: widgetDisplayName(lang),
167
+ content: /* @__PURE__ */ jsxs(Box, {
168
+ sx: styles.filtersContainer,
169
+ children: [/* @__PURE__ */ jsx(DashboardFilters, {
170
+ initialValues: filters,
171
+ onChange: setFilters,
172
+ shifts,
173
+ onFeatureRequest: handleFeatureRequest
174
+ }), /* @__PURE__ */ jsx(Typography, {
175
+ variant: "caption",
176
+ sx: styles.filterDisclaimer,
177
+ children: t("widgetPreview.filterDisclaimer")
178
+ })]
179
+ }),
180
+ navProps: { items: navItems },
181
+ menuProps: {
182
+ items: menuItems,
183
+ buttonColor: "white"
184
+ }
185
+ },
179
186
  sidebarMenuProps: {
180
187
  enabled: true,
181
188
  items: []
182
189
  },
183
190
  sidePanelProps,
184
- styles: { overflowY: "auto" }
185
- }, /* @__PURE__ */ React.createElement(Routing, {
186
- apiUrl,
187
- lang,
188
- filters,
189
- getWidgetTitle,
190
- widgetCustomTitle,
191
- widgetName,
192
- widgetDisplayName,
193
- widgetWidth,
194
- widgetHeight,
195
- widgetThumbnail,
196
- widgetRequiredFeatures,
197
- widgetExtraPermissions,
198
- widgetVersion,
199
- Widget,
200
- sidePanelOpened: sidePanelProps.open || false,
201
- updateSidePanelProps,
202
- editMode
203
- }));
191
+ styles: { overflowY: "auto" },
192
+ children: /* @__PURE__ */ jsx(Routing, {
193
+ apiUrl,
194
+ lang,
195
+ filters,
196
+ getWidgetTitle,
197
+ widgetCustomTitle,
198
+ widgetName,
199
+ widgetDisplayName,
200
+ widgetWidth,
201
+ widgetHeight,
202
+ widgetThumbnail,
203
+ widgetRequiredFeatures,
204
+ widgetExtraPermissions,
205
+ widgetVersion,
206
+ Widget,
207
+ sidePanelOpened: sidePanelProps.open || false,
208
+ updateSidePanelProps,
209
+ editMode
210
+ })
211
+ });
204
212
  };
205
213
  //#endregion
206
214
  //#region src/components/WidgetPreview/index.tsx
207
215
  const WidgetPreview = ({ baseUrl, locales, ...contentProps }) => {
208
- const authProps = {
209
- redirectPath: "/",
210
- clientId: "sample-app-client-id",
211
- grantType: "password"
212
- };
213
- const i18nProps = { locales };
214
- return /* @__PURE__ */ React.createElement(App, {
216
+ return /* @__PURE__ */ jsx(App, {
215
217
  baseUrl,
216
- authProps,
217
- i18nProps
218
- }, /* @__PURE__ */ React.createElement(WidgetPreviewContent, contentProps));
218
+ authProps: {
219
+ redirectPath: "/",
220
+ clientId: "sample-app-client-id",
221
+ grantType: "password"
222
+ },
223
+ i18nProps: { locales },
224
+ children: /* @__PURE__ */ jsx(WidgetPreviewContent, { ...contentProps })
225
+ });
219
226
  };
220
227
  //#endregion
221
228
  //#region src/index.tsx
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["en","pl","AndonCloudApp","locales"],"sources":["../src/locales/en/translation.json","../src/locales/pl/translation.json","../src/locales/index.ts","../src/components/Dashboard/index.tsx","../src/components/Routing.tsx","../src/components/WidgetPreview/styles.ts","../src/components/WidgetPreview/WidgetPreviewContent.tsx","../src/components/WidgetPreview/index.tsx","../src/index.tsx"],"sourcesContent":["","","import en from './en/translation.json';\nimport pl from './pl/translation.json';\n\nconst resources = {\n en: {\n translation: en,\n },\n pl: {\n translation: pl,\n },\n};\n\nexport default resources;\n","import 'react-grid-layout/css/styles.css';\nimport 'react-resizable/css/styles.css';\n\nimport React, { useState } from 'react';\nimport ReactGridLayout, { useContainerWidth } from 'react-grid-layout';\n\nimport { Box } from '@mui/material';\nimport { WidgetCard } from 'andoncloud-dashboard-toolkit';\nimport { useLoginStatus } from 'andoncloud-sdk';\nimport getUuid from 'uuid-by-string';\n\nimport { DashboardProps } from '@/types';\n\nconst Dashboard: React.FC<DashboardProps> = ({\n apiUrl,\n lang,\n filters,\n widgetName,\n widgetDisplayName,\n getWidgetTitle,\n widgetCustomTitle,\n widgetWidth,\n widgetHeight,\n widgetThumbnail,\n widgetRequiredFeatures,\n widgetExtraPermissions,\n widgetVersion,\n Widget,\n sidePanelOpened,\n updateSidePanelProps,\n editMode,\n}) => {\n const { status } = useLoginStatus();\n const { width, containerRef, mounted } = useContainerWidth();\n const [settingsModalOpened, setSettingsModalOpened] = useState<boolean>(false);\n const widgetId = getUuid(widgetName);\n\n return (\n <Box ref={containerRef}>\n {mounted && (\n <ReactGridLayout\n className=\"layout\"\n width={width}\n layout={[{ i: widgetId, x: 0, y: 0, w: widgetWidth || 3, h: widgetHeight || 4 }]}\n dragConfig={{ handle: '.draggable-handle' }}\n >\n {status === 'connected' && (\n <WidgetCard\n key={widgetId}\n id={widgetId}\n Widget={Widget}\n title={widgetDisplayName(lang)}\n getTitle={getWidgetTitle}\n customTitle={widgetCustomTitle}\n thumbnail={widgetThumbnail}\n url={apiUrl}\n lang={lang}\n filters={filters}\n requiredFeatures={widgetRequiredFeatures}\n extraPermissions={widgetExtraPermissions}\n openSettingsModal={settingsModalOpened}\n onSettingsModalOpened={() => setSettingsModalOpened(true)}\n onSettingsModalClosed={() => setSettingsModalOpened(false)}\n sidePanelOpened={sidePanelOpened || false}\n updateSidePanelProps={updateSidePanelProps}\n editMode={editMode}\n version={widgetVersion}\n />\n )}\n </ReactGridLayout>\n )}\n </Box>\n );\n};\n\nexport default Dashboard;\n","import React from 'react';\nimport { Navigate, useRoutes } from 'react-router-dom';\n\nimport { useLoginStatus } from 'andoncloud-sdk';\n\nimport { DashboardProps } from '@/types';\n\nimport Dashboard from './Dashboard';\n\nconst routes = (\n isLoggedIn: boolean,\n {\n apiUrl,\n lang,\n filters,\n getWidgetTitle,\n widgetCustomTitle,\n widgetName,\n widgetDisplayName,\n widgetWidth,\n widgetHeight,\n widgetThumbnail,\n widgetRequiredFeatures,\n widgetExtraPermissions,\n widgetVersion,\n Widget,\n sidePanelOpened,\n updateSidePanelProps,\n editMode,\n }: DashboardProps,\n) => [\n {\n path: '/',\n element: isLoggedIn ? (\n <Dashboard\n apiUrl={apiUrl}\n lang={lang}\n filters={filters}\n getWidgetTitle={getWidgetTitle}\n widgetCustomTitle={widgetCustomTitle}\n widgetName={widgetName}\n widgetDisplayName={widgetDisplayName}\n widgetWidth={widgetWidth}\n widgetHeight={widgetHeight}\n widgetThumbnail={widgetThumbnail}\n widgetRequiredFeatures={widgetRequiredFeatures}\n widgetExtraPermissions={widgetExtraPermissions}\n widgetVersion={widgetVersion}\n Widget={Widget}\n sidePanelOpened={sidePanelOpened}\n updateSidePanelProps={updateSidePanelProps}\n editMode={editMode}\n />\n ) : (\n <Navigate to=\"/login\" />\n ),\n },\n];\n\nconst Routing: React.FC<DashboardProps> = (dashboardProps) => {\n const { status } = useLoginStatus();\n\n return useRoutes(routes(status === 'connected', dashboardProps));\n};\n\nexport default Routing;\n","import { Theme } from '@mui/material';\nimport { alpha } from '@mui/material/styles';\n\nexport const styles = {\n filtersContainer: {\n display: 'flex',\n alignItems: 'flex-end',\n },\n filterDisclaimer: (theme: Theme) => ({\n flexShrink: 0,\n maxWidth: theme.spacing(22),\n marginLeft: theme.spacing(2),\n padding: theme.spacing(0.5, 1, 0.5, 2.5),\n textIndent: theme.spacing(-1.5),\n fontSize: '0.75rem',\n lineHeight: 1.3,\n color: theme.palette.warning.main,\n borderRadius: theme.spacing(0.75),\n backgroundColor: alpha(theme.palette.common.black, 0.2),\n }),\n};\n","import { useEffect, useState } from 'react';\n\nimport { Box, Typography } from '@mui/material';\nimport { BaseWidgetData, BaseWidgetSettings, DashboardFilters, FilterValues, Shift, useGqlClients } from 'andoncloud-dashboard-toolkit';\nimport {\n Container,\n HeaderProps,\n refreshUserData,\n setLocale,\n sidePanelDefaultProps,\n SidePanelProps,\n} from 'andoncloud-sdk';\nimport { useTranslation } from 'react-i18next';\n\nimport { WidgetPreviewProps } from '@/types';\n\nimport Routing from '../Routing';\n\nimport { styles } from './styles';\n\nconst WidgetPreviewContent = <WD extends BaseWidgetData = BaseWidgetData, WS extends BaseWidgetSettings = BaseWidgetSettings>({\n apiUrl,\n widgetName,\n widgetDisplayName,\n getWidgetTitle,\n widgetCustomTitle,\n widgetWidth,\n widgetHeight,\n widgetThumbnail,\n widgetRequiredFeatures,\n widgetExtraPermissions,\n widgetVersion,\n Widget,\n}: Omit<WidgetPreviewProps<WD, WS>, 'baseUrl' | 'locales'>) => {\n // -- Translation --\n const { t, i18n } = useTranslation();\n\n // -- Local state --\n const [filters, setFilters] = useState<FilterValues | undefined>();\n const [shifts, setShifts] = useState<Shift[]>([]);\n const [editMode, setEditMode] = useState(true);\n const [sidePanelProps, setSidePanelProps] = useState<SidePanelProps>(sidePanelDefaultProps);\n\n // -- Data layer --\n const lang = (i18n.language || 'en') as 'en' | 'pl';\n const { graphqlSdk } = useGqlClients({ url: apiUrl, wsUrl: '', lang });\n\n useEffect(() => {\n if (!graphqlSdk) return;\n graphqlSdk\n .shifts()\n .then((data) => setShifts(data.shifts))\n .catch(() => {});\n }, [graphqlSdk]);\n\n // handlers\n const handleFeatureRequest = async (): Promise<boolean> => {\n await refreshUserData();\n return true;\n };\n\n const updateSidePanelProps = ({ onClose: onCloseCallback, ...updatedProps }: Partial<SidePanelProps>) => {\n setSidePanelProps((current) => ({\n ...(updatedProps.open ? sidePanelDefaultProps : current),\n ...updatedProps,\n onClose: () => {\n setSidePanelProps((current) => ({ ...current, open: false }));\n onCloseCallback?.();\n },\n }));\n };\n\n const navItems = [\n {\n label: editMode\n ? t('widgetPreview.saveChanges')\n : t('widgetPreview.editMode'),\n action: () => setEditMode((current) => !current),\n },\n ];\n\n const menuItems = [\n {\n label: t('widgetPreview.changeLanguage'),\n action: () => setLocale(lang === 'pl' ? 'en' : 'pl'),\n },\n ];\n\n const headerProps: HeaderProps = {\n position: 'fixed',\n leadingText: widgetDisplayName(lang),\n content: (\n <Box sx={styles.filtersContainer}>\n <DashboardFilters\n initialValues={filters}\n onChange={setFilters}\n shifts={shifts}\n onFeatureRequest={handleFeatureRequest}\n />\n <Typography variant=\"caption\" sx={styles.filterDisclaimer}>\n {t('widgetPreview.filterDisclaimer')}\n </Typography>\n </Box>\n ),\n navProps: {\n items: navItems,\n },\n menuProps: {\n items: menuItems,\n buttonColor: 'white',\n },\n };\n\n return (\n <Container\n headerProps={headerProps}\n sidebarMenuProps={{\n enabled: true,\n items: [],\n }}\n sidePanelProps={sidePanelProps}\n styles={{\n overflowY: 'auto',\n }}\n >\n <Routing\n apiUrl={apiUrl}\n lang={lang}\n filters={filters}\n getWidgetTitle={getWidgetTitle}\n widgetCustomTitle={widgetCustomTitle}\n widgetName={widgetName}\n widgetDisplayName={widgetDisplayName}\n widgetWidth={widgetWidth}\n widgetHeight={widgetHeight}\n widgetThumbnail={widgetThumbnail}\n widgetRequiredFeatures={widgetRequiredFeatures}\n widgetExtraPermissions={widgetExtraPermissions}\n widgetVersion={widgetVersion}\n Widget={Widget}\n sidePanelOpened={sidePanelProps.open || false}\n updateSidePanelProps={updateSidePanelProps}\n editMode={editMode}\n />\n </Container>\n );\n};\n\nexport { WidgetPreviewContent };\n","import { BaseWidgetData, BaseWidgetSettings } from 'andoncloud-dashboard-toolkit';\nimport {\n App as AndonCloudApp,\n AuthProps,\n I18nProps,\n} from 'andoncloud-sdk';\n\nimport { WidgetPreviewProps } from '@/types';\n\nimport { WidgetPreviewContent } from './WidgetPreviewContent';\n\nconst WidgetPreview = <WD extends BaseWidgetData = BaseWidgetData, WS extends BaseWidgetSettings = BaseWidgetSettings>({\n baseUrl,\n locales,\n ...contentProps\n}: WidgetPreviewProps<WD, WS>) => {\n const authProps: AuthProps = {\n redirectPath: '/',\n clientId: 'sample-app-client-id',\n grantType: 'password',\n };\n\n const i18nProps: I18nProps = {\n locales,\n };\n\n return (\n <AndonCloudApp baseUrl={baseUrl} authProps={authProps} i18nProps={i18nProps}>\n <WidgetPreviewContent {...contentProps} />\n </AndonCloudApp>\n );\n};\n\nexport default WidgetPreview;\n","import { registerTranslations } from 'andoncloud-sdk';\n\nimport locales from './locales';\n\nregisterTranslations(locales);\n\nexport { default as WidgetPreview } from './components/WidgetPreview';\n\nexport type { WidgetPreviewProps } from './types';\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["en","pl","AndonCloudApp","locales"],"sources":["../src/locales/en/translation.json","../src/locales/pl/translation.json","../src/locales/index.ts","../src/components/Dashboard/index.tsx","../src/components/Routing.tsx","../src/components/WidgetPreview/styles.ts","../src/components/WidgetPreview/WidgetPreviewContent.tsx","../src/components/WidgetPreview/index.tsx","../src/index.tsx"],"sourcesContent":["","","import en from './en/translation.json';\nimport pl from './pl/translation.json';\n\nconst resources = {\n en: {\n translation: en,\n },\n pl: {\n translation: pl,\n },\n};\n\nexport default resources;\n","import 'react-grid-layout/css/styles.css';\nimport 'react-resizable/css/styles.css';\n\nimport React, { useState } from 'react';\nimport ReactGridLayout, { useContainerWidth } from 'react-grid-layout';\n\nimport { Box } from '@mui/material';\nimport { WidgetCard } from 'andoncloud-dashboard-toolkit';\nimport { useLoginStatus } from 'andoncloud-sdk';\nimport getUuid from 'uuid-by-string';\n\nimport { DashboardProps } from '@/types';\n\nconst Dashboard: React.FC<DashboardProps> = ({\n apiUrl,\n lang,\n filters,\n widgetName,\n widgetDisplayName,\n getWidgetTitle,\n widgetCustomTitle,\n widgetWidth,\n widgetHeight,\n widgetThumbnail,\n widgetRequiredFeatures,\n widgetExtraPermissions,\n widgetVersion,\n Widget,\n sidePanelOpened,\n updateSidePanelProps,\n editMode,\n}) => {\n const { status } = useLoginStatus();\n const { width, containerRef, mounted } = useContainerWidth();\n const [settingsModalOpened, setSettingsModalOpened] = useState<boolean>(false);\n const widgetId = getUuid(widgetName);\n\n return (\n <Box ref={containerRef}>\n {mounted && (\n <ReactGridLayout\n className=\"layout\"\n width={width}\n layout={[{ i: widgetId, x: 0, y: 0, w: widgetWidth || 3, h: widgetHeight || 4 }]}\n dragConfig={{ handle: '.draggable-handle' }}\n >\n {status === 'connected' && (\n <WidgetCard\n key={widgetId}\n id={widgetId}\n Widget={Widget}\n title={widgetDisplayName(lang)}\n getTitle={getWidgetTitle}\n customTitle={widgetCustomTitle}\n thumbnail={widgetThumbnail}\n url={apiUrl}\n lang={lang}\n filters={filters}\n requiredFeatures={widgetRequiredFeatures}\n extraPermissions={widgetExtraPermissions}\n openSettingsModal={settingsModalOpened}\n onSettingsModalOpened={() => setSettingsModalOpened(true)}\n onSettingsModalClosed={() => setSettingsModalOpened(false)}\n sidePanelOpened={sidePanelOpened || false}\n updateSidePanelProps={updateSidePanelProps}\n editMode={editMode}\n version={widgetVersion}\n />\n )}\n </ReactGridLayout>\n )}\n </Box>\n );\n};\n\nexport default Dashboard;\n","import React from 'react';\nimport { Navigate, useRoutes } from 'react-router-dom';\n\nimport { useLoginStatus } from 'andoncloud-sdk';\n\nimport { DashboardProps } from '@/types';\n\nimport Dashboard from './Dashboard';\n\nconst routes = (\n isLoggedIn: boolean,\n {\n apiUrl,\n lang,\n filters,\n getWidgetTitle,\n widgetCustomTitle,\n widgetName,\n widgetDisplayName,\n widgetWidth,\n widgetHeight,\n widgetThumbnail,\n widgetRequiredFeatures,\n widgetExtraPermissions,\n widgetVersion,\n Widget,\n sidePanelOpened,\n updateSidePanelProps,\n editMode,\n }: DashboardProps,\n) => [\n {\n path: '/',\n element: isLoggedIn ? (\n <Dashboard\n apiUrl={apiUrl}\n lang={lang}\n filters={filters}\n getWidgetTitle={getWidgetTitle}\n widgetCustomTitle={widgetCustomTitle}\n widgetName={widgetName}\n widgetDisplayName={widgetDisplayName}\n widgetWidth={widgetWidth}\n widgetHeight={widgetHeight}\n widgetThumbnail={widgetThumbnail}\n widgetRequiredFeatures={widgetRequiredFeatures}\n widgetExtraPermissions={widgetExtraPermissions}\n widgetVersion={widgetVersion}\n Widget={Widget}\n sidePanelOpened={sidePanelOpened}\n updateSidePanelProps={updateSidePanelProps}\n editMode={editMode}\n />\n ) : (\n <Navigate to=\"/login\" />\n ),\n },\n];\n\nconst Routing: React.FC<DashboardProps> = (dashboardProps) => {\n const { status } = useLoginStatus();\n\n return useRoutes(routes(status === 'connected', dashboardProps));\n};\n\nexport default Routing;\n","import { Theme } from '@mui/material';\nimport { alpha } from '@mui/material/styles';\n\nexport const styles = {\n filtersContainer: {\n display: 'flex',\n alignItems: 'flex-end',\n },\n filterDisclaimer: (theme: Theme) => ({\n flexShrink: 0,\n maxWidth: theme.spacing(22),\n marginLeft: theme.spacing(2),\n padding: theme.spacing(0.5, 1, 0.5, 2.5),\n textIndent: theme.spacing(-1.5),\n fontSize: '0.75rem',\n lineHeight: 1.3,\n color: theme.palette.warning.main,\n borderRadius: theme.spacing(0.75),\n backgroundColor: alpha(theme.palette.common.black, 0.2),\n }),\n};\n","import { useEffect, useState } from 'react';\n\nimport { Box, Typography } from '@mui/material';\nimport { BaseWidgetData, BaseWidgetSettings, DashboardFilters, FilterValues, Shift, useGqlClients } from 'andoncloud-dashboard-toolkit';\nimport {\n Container,\n HeaderProps,\n refreshUserData,\n setLocale,\n sidePanelDefaultProps,\n SidePanelProps,\n} from 'andoncloud-sdk';\nimport { useTranslation } from 'react-i18next';\n\nimport { WidgetPreviewProps } from '@/types';\n\nimport Routing from '../Routing';\n\nimport { styles } from './styles';\n\nconst WidgetPreviewContent = <WD extends BaseWidgetData = BaseWidgetData, WS extends BaseWidgetSettings = BaseWidgetSettings>({\n apiUrl,\n widgetName,\n widgetDisplayName,\n getWidgetTitle,\n widgetCustomTitle,\n widgetWidth,\n widgetHeight,\n widgetThumbnail,\n widgetRequiredFeatures,\n widgetExtraPermissions,\n widgetVersion,\n Widget,\n}: Omit<WidgetPreviewProps<WD, WS>, 'baseUrl' | 'locales'>) => {\n // -- Translation --\n const { t, i18n } = useTranslation();\n\n // -- Local state --\n const [filters, setFilters] = useState<FilterValues | undefined>();\n const [shifts, setShifts] = useState<Shift[]>([]);\n const [editMode, setEditMode] = useState(true);\n const [sidePanelProps, setSidePanelProps] = useState<SidePanelProps>(sidePanelDefaultProps);\n\n // -- Data layer --\n const lang = (i18n.language || 'en') as 'en' | 'pl';\n const { graphqlSdk } = useGqlClients({ url: apiUrl, wsUrl: '', lang });\n\n useEffect(() => {\n if (!graphqlSdk) return;\n graphqlSdk\n .shifts()\n .then((data) => setShifts(data.shifts))\n .catch(() => {});\n }, [graphqlSdk]);\n\n // handlers\n const handleFeatureRequest = async (): Promise<boolean> => {\n await refreshUserData();\n return true;\n };\n\n const updateSidePanelProps = ({ onClose: onCloseCallback, ...updatedProps }: Partial<SidePanelProps>) => {\n setSidePanelProps((current) => ({\n ...(updatedProps.open ? sidePanelDefaultProps : current),\n ...updatedProps,\n onClose: () => {\n setSidePanelProps((current) => ({ ...current, open: false }));\n onCloseCallback?.();\n },\n }));\n };\n\n const navItems = [\n {\n label: editMode\n ? t('widgetPreview.saveChanges')\n : t('widgetPreview.editMode'),\n action: () => setEditMode((current) => !current),\n },\n ];\n\n const menuItems = [\n {\n label: t('widgetPreview.changeLanguage'),\n action: () => setLocale(lang === 'pl' ? 'en' : 'pl'),\n },\n ];\n\n const headerProps: HeaderProps = {\n position: 'fixed',\n leadingText: widgetDisplayName(lang),\n content: (\n <Box sx={styles.filtersContainer}>\n <DashboardFilters\n initialValues={filters}\n onChange={setFilters}\n shifts={shifts}\n onFeatureRequest={handleFeatureRequest}\n />\n <Typography variant=\"caption\" sx={styles.filterDisclaimer}>\n {t('widgetPreview.filterDisclaimer')}\n </Typography>\n </Box>\n ),\n navProps: {\n items: navItems,\n },\n menuProps: {\n items: menuItems,\n buttonColor: 'white',\n },\n };\n\n return (\n <Container\n headerProps={headerProps}\n sidebarMenuProps={{\n enabled: true,\n items: [],\n }}\n sidePanelProps={sidePanelProps}\n styles={{\n overflowY: 'auto',\n }}\n >\n <Routing\n apiUrl={apiUrl}\n lang={lang}\n filters={filters}\n getWidgetTitle={getWidgetTitle}\n widgetCustomTitle={widgetCustomTitle}\n widgetName={widgetName}\n widgetDisplayName={widgetDisplayName}\n widgetWidth={widgetWidth}\n widgetHeight={widgetHeight}\n widgetThumbnail={widgetThumbnail}\n widgetRequiredFeatures={widgetRequiredFeatures}\n widgetExtraPermissions={widgetExtraPermissions}\n widgetVersion={widgetVersion}\n Widget={Widget}\n sidePanelOpened={sidePanelProps.open || false}\n updateSidePanelProps={updateSidePanelProps}\n editMode={editMode}\n />\n </Container>\n );\n};\n\nexport { WidgetPreviewContent };\n","import { BaseWidgetData, BaseWidgetSettings } from 'andoncloud-dashboard-toolkit';\nimport {\n App as AndonCloudApp,\n AuthProps,\n I18nProps,\n} from 'andoncloud-sdk';\n\nimport { WidgetPreviewProps } from '@/types';\n\nimport { WidgetPreviewContent } from './WidgetPreviewContent';\n\nconst WidgetPreview = <WD extends BaseWidgetData = BaseWidgetData, WS extends BaseWidgetSettings = BaseWidgetSettings>({\n baseUrl,\n locales,\n ...contentProps\n}: WidgetPreviewProps<WD, WS>) => {\n const authProps: AuthProps = {\n redirectPath: '/',\n clientId: 'sample-app-client-id',\n grantType: 'password',\n };\n\n const i18nProps: I18nProps = {\n locales,\n };\n\n return (\n <AndonCloudApp baseUrl={baseUrl} authProps={authProps} i18nProps={i18nProps}>\n <WidgetPreviewContent {...contentProps} />\n </AndonCloudApp>\n );\n};\n\nexport default WidgetPreview;\n","import { registerTranslations } from 'andoncloud-sdk';\n\nimport locales from './locales';\n\nregisterTranslations(locales);\n\nexport { default as WidgetPreview } from './components/WidgetPreview';\n\nexport type { WidgetPreviewProps } from './types';\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "andoncloud-widget-preview",
3
- "version": "1.5.0",
3
+ "version": "1.5.1",
4
4
  "description": "AndonCloud widget preview",
5
5
  "license": "MIT",
6
6
  "type": "module",