diff --git a/console-extensions.json b/console-extensions.json index b823fec3c..0355afa68 100644 --- a/console-extensions.json +++ b/console-extensions.json @@ -5,6 +5,10 @@ }, "type": "console.flag" }, + { + "properties": { "handler": { "$codeRef": "gitopsFlags.useGitOpsMulticlusterFlag" } }, + "type": "console.flag/hookProvider" + }, { "type": "console.navigation/href", "properties": { @@ -460,6 +464,20 @@ } } }, + { + "flags": { + "required": ["GITOPS_MULTICLUSTER"] + }, + "properties": { + "component": { + "$codeRef": "ApplicationDetails" + }, + "path": [ + "/k8s/cluster/:cluster/ns/:ns/argoproj.io~v1alpha1~Application/:name" + ] + }, + "type": "console.page/route" + }, { "type": "console.page/resource/details", "flags": { diff --git a/package.json b/package.json index d21c4e5a6..3aa3ee834 100644 --- a/package.json +++ b/package.json @@ -23,9 +23,9 @@ "@patternfly/quickstarts": "^6.2.0", "@patternfly/react-charts": "^8.2.0", "@patternfly/react-core": "^6.2.0", + "@patternfly/react-data-view": "^6.2.0", "@patternfly/react-icons": "^6.2.0", "@patternfly/react-table": "^6.2.0", - "@patternfly/react-data-view": "^6.2.0", "@patternfly/react-tokens": "6.2.0", "@patternfly/react-topology": "^6.2.0", "@types/classnames": "^2.3.1", @@ -33,8 +33,8 @@ "@types/node": "^17.0.21", "@types/react": "17.0.89", "@types/react-redux": "7.1.34", - "@types/webpack-dev-server": "^4.7.2", "@types/semver": "7.7.1", + "@types/webpack-dev-server": "^4.7.2", "@typescript-eslint/eslint-plugin": "^5.15.0", "@typescript-eslint/parser": "^5.15.0", "copy-webpack-plugin": "12.0.2", @@ -51,13 +51,13 @@ "eslint-plugin-react-hooks": "^4.3.0", "eslint-plugin-simple-import-sort": "^7.0.0", "file-loader": "6.2.0", + "http-server": "0.12.x", "i18next": "^19.8.3", "i18next-parser": "^3.3.0", "lodash-es": "^4.17.21", + "marked": "15.0.12", "prettier": "^2.6.0", "prop-types": "15.7.x", - "http-server": "0.12.x", - "marked": "15.0.12", "react": "17.0.2", "react-dom": "17.0.2", "react-i18next": "^11.7.3", @@ -101,6 +101,7 @@ } }, "dependencies": { + "@stolostron/multicluster-sdk": "^0.10.1", "classnames": "^2.3.2", "git-url-parse": "^13.1.0", "react": "17.0.2", diff --git a/src/components/utils/flags/index.ts b/src/components/utils/flags/index.ts index e0edef9da..6f0e2533e 100644 --- a/src/components/utils/flags/index.ts +++ b/src/components/utils/flags/index.ts @@ -1,2 +1,3 @@ export { detectOpenShiftVersion } from './detectOpenShiftVersion'; export { enableGitOpsDynamicFlag } from './enableGitOpsDynamicFlag'; +export { useGitOpsMulticlusterFlag } from './useGitOpsMulticlusterFlag'; diff --git a/src/components/utils/flags/useGitOpsMulticlusterFlag.ts b/src/components/utils/flags/useGitOpsMulticlusterFlag.ts new file mode 100644 index 000000000..1262ab812 --- /dev/null +++ b/src/components/utils/flags/useGitOpsMulticlusterFlag.ts @@ -0,0 +1,16 @@ +import { useEffect } from 'react'; + +import { SetFeatureFlag } from '@openshift-console/dynamic-plugin-sdk'; +import { useIsFleetAvailable } from '@stolostron/multicluster-sdk'; + +import { FLAG_GITOPS_MULTICLUSTER } from '../../../const'; + +export const useGitOpsMulticlusterFlag = (setFeatureFlag: SetFeatureFlag) => { + const isFleetAvailable = useIsFleetAvailable(); + + useEffect(() => { + if (isFleetAvailable) { + setFeatureFlag(FLAG_GITOPS_MULTICLUSTER, isFleetAvailable); + } + }, [isFleetAvailable, setFeatureFlag]); +}; diff --git a/src/const.ts b/src/const.ts index 6d197a7e8..1edcb24c1 100644 --- a/src/const.ts +++ b/src/const.ts @@ -10,3 +10,5 @@ export const fetchDataFrequency = 30; export const FLAG_GITOPS_DYNAMIC = 'GITOPS_DYNAMIC'; export const FLAG_GITOPS_ENABLE_TOPOLOGY = 'GITOPS_ENABLE_TOPOLOGY'; + +export const FLAG_GITOPS_MULTICLUSTER = 'GITOPS_MULTICLUSTER'; diff --git a/src/gitops/components/application/ApplicationDetailsTab.tsx b/src/gitops/components/application/ApplicationDetailsTab.tsx index cbea04bac..df0a7225a 100644 --- a/src/gitops/components/application/ApplicationDetailsTab.tsx +++ b/src/gitops/components/application/ApplicationDetailsTab.tsx @@ -217,18 +217,22 @@ const ApplicationDetailsTab: React.FC = ({ obj }) => - - - 1 && ' and ' + (revisions.length - 1) + ' more' - } - /> - - + {sources && sources.length && revisions && revisions.length && ( + + + 1 && ' and ' + (revisions.length - 1) + ' more' + } + /> + + + )} @@ -254,7 +258,9 @@ const ApplicationDetailsTab: React.FC = ({ obj }) => title={t('Target Revision')} help={t('The specified revision for the Application.')} > - {sources[0].targetRevision ? sources[0].targetRevision : 'HEAD'} + {sources && sources.length && sources[0].targetRevision + ? sources[0].targetRevision + : 'HEAD'} = ({ name, namespace, kind }) => { +const ApplicationNavPage: React.FC = () => { const { t } = useGitOpsTranslation(); - const [application, loaded] = useK8sWatchResource({ + const { + cluster, + name, + ns: namespace, + } = useParams<{ + cluster?: string; + name: string; + ns: string; + }>(); + const [application, loaded] = useFleetK8sWatchResource({ groupVersionKind: { group: 'argoproj.io', kind: 'Application', version: 'v1alpha1', }, - kind, + cluster, name, namespace, }); diff --git a/src/gitops/components/shared/ApplicationList.tsx b/src/gitops/components/shared/ApplicationList.tsx index 3b4250121..1f12ea65b 100644 --- a/src/gitops/components/shared/ApplicationList.tsx +++ b/src/gitops/components/shared/ApplicationList.tsx @@ -1,7 +1,9 @@ import * as React from 'react'; import { useTranslation } from 'react-i18next'; +import { Link } from 'react-router-dom-v5-compat'; import DevPreviewBadge from 'src/components/import/badges/DevPreviewBadge'; +import { useMulticlusterK8sWatchResource } from '@gitops/hooks/useMuticlusterK8sWatchResource'; import { Action, K8sResourceCommon, @@ -11,7 +13,6 @@ import { ListPageHeader, ResourceLink, RowFilter, - useK8sWatchResource, useListPageFilter, } from '@openshift-console/dynamic-plugin-sdk'; import { ErrorState } from '@patternfly/react-component-groups'; @@ -19,6 +20,11 @@ import { EmptyState, EmptyStateBody, Flex, FlexItem, Spinner } from '@patternfly import { DataViewTh, DataViewTr } from '@patternfly/react-data-view/dist/esm/DataViewTable'; import { CubesIcon } from '@patternfly/react-icons'; import { Tbody, Td, ThProps, Tr } from '@patternfly/react-table'; +import { + FleetResourceLink, + useHubClusterName, + useIsFleetAvailable, +} from '@stolostron/multicluster-sdk'; import { useApplicationActionsProvider } from '../..//hooks/useApplicationActionsProvider'; import RevisionFragment from '../..//Revision/Revision'; @@ -83,7 +89,8 @@ const ApplicationList: React.FC = ({ if (listAllNamespaces) { namespace = null; } - const [applications, loaded, loadError] = useK8sWatchResource({ + + const [applications, loaded, loadError] = useMulticlusterK8sWatchResource({ isList: true, groupVersionKind: { group: 'argoproj.io', @@ -305,6 +312,8 @@ const ApplicationActionsCell: React.FC<{ app: ApplicationKind }> = ({ app }) => }; const useApplicationRowsDV = (applicationsList, namespace): DataViewTr[] => { + const isFleetAvailable = useIsFleetAvailable(); + const [hubClusterName] = useHubClusterName(); const rows: DataViewTr[] = []; applicationsList.forEach((app, index) => { let sources: ApplicationSource[]; @@ -324,21 +333,47 @@ const useApplicationRowsDV = (applicationsList, namespace): DataViewTr[] => { { cell: (
- - - {isApplicationRefreshing(app) && } - - + {app.cluster !== hubClusterName ? ( + + {app.metadata.name} + + ) : ( + + + {isApplicationRefreshing(app) && } + + + )}
), id: app.metadata?.name, dataLabel: 'Name', }, + ...(isFleetAvailable + ? [ + { + cell: ( + + ), + dataLabel: 'Cluster', + }, + ] + : []), ...(!namespace ? [ { @@ -371,15 +406,23 @@ const useApplicationRowsDV = (applicationsList, namespace): DataViewTr[] => { id: app?.status?.sync?.revision, cell: ( <> - {sources[0].targetRevision ? sources[0].targetRevision : 'HEAD'}  - {!(app.status?.sourceType == 'Helm' && sources[0].chart) && ( - 1 && ' and ' + (revisions.length - 1) + ' more'} - /> - )} + {/* Extra guard code added here - ACM search will not have all of this information */} + {sources && !!sources.length && sources[0].targetRevision + ? sources[0].targetRevision + : 'HEAD'} +   + {sources && + !!sources.length && + !(app.status?.sourceType == 'Helm' && sources[0].chart) && + revisions && + !!revisions.length && ( + 1 && ' and ' + (revisions.length - 1) + ' more'} + /> + )} ), }, @@ -406,7 +449,8 @@ const useColumnsDV = ( namespace: string, getSortParams: (columnIndex: number) => ThProps['sort'], ): DataViewTh[] => { - const i: number = namespace ? 0 : 1; + const isFleetAvailable = useIsFleetAvailable(); + const i: number = (namespace ? 0 : 1) + (isFleetAvailable ? 1 : 0); const { t } = useTranslation('plugin__gitops-plugin'); const columns: DataViewTh[] = [ { @@ -417,6 +461,18 @@ const useColumnsDV = ( sort: getSortParams(0), }, }, + ...(isFleetAvailable + ? [ + { + cell: t('Cluster'), + props: { + 'aria-label': 'cluster', + className: 'pf-m-width-15', + sort: getSortParams(1), + }, + }, + ] + : []), ...(!namespace ? [ { @@ -424,7 +480,7 @@ const useColumnsDV = ( props: { 'aria-label': 'namespace', className: 'pf-m-width-15', - sort: getSortParams(1), + sort: getSortParams(isFleetAvailable ? 2 : 1), }, }, ] diff --git a/src/gitops/components/shared/EventsTab/EventsTab.tsx b/src/gitops/components/shared/EventsTab/EventsTab.tsx index 74ac71ffd..2dbc2bc3a 100644 --- a/src/gitops/components/shared/EventsTab/EventsTab.tsx +++ b/src/gitops/components/shared/EventsTab/EventsTab.tsx @@ -1,8 +1,9 @@ import * as React from 'react'; import { RouteComponentProps } from 'react-router'; -import { K8sResourceCommon, ResourceEventStream } from '@openshift-console/dynamic-plugin-sdk'; +import { K8sResourceCommon } from '@openshift-console/dynamic-plugin-sdk'; import { PageSection, Title } from '@patternfly/react-core'; +import { FleetResourceEventStream } from '@stolostron/multicluster-sdk'; type EventsTabProps = RouteComponentProps<{ ns: string; @@ -17,7 +18,7 @@ const EventsTab: React.FC = ({ obj }) => { {obj.kind} events - {obj && } + {obj && } ); }; diff --git a/src/gitops/hooks/useMuticlusterK8sWatchResource.tsx b/src/gitops/hooks/useMuticlusterK8sWatchResource.tsx new file mode 100644 index 000000000..3d7139f73 --- /dev/null +++ b/src/gitops/hooks/useMuticlusterK8sWatchResource.tsx @@ -0,0 +1,15 @@ +import { K8sResourceCommon, useK8sWatchResource } from '@openshift-console/dynamic-plugin-sdk'; +import { + FleetWatchK8sResource, + useFleetSearchPoll, + useIsFleetAvailable, +} from '@stolostron/multicluster-sdk'; + +export function useMulticlusterK8sWatchResource( + initResource: FleetWatchK8sResource, +) { + const isFleetAvailable = useIsFleetAvailable(); + const fleetResult = useFleetSearchPoll(isFleetAvailable ? initResource : {}); // SDK bug - should be able to pass null here to disable hook + const localResult = useK8sWatchResource(isFleetAvailable ? null : initResource); + return isFleetAvailable ? fleetResult : localResult; +} diff --git a/start-console.sh b/start-console.sh index fd7b129b2..50abd8ebf 100755 --- a/start-console.sh +++ b/start-console.sh @@ -43,7 +43,7 @@ if [ -x "$(command -v podman)" ]; then podman run --pull always --rm --network=host --env-file <(set | grep BRIDGE) $CONSOLE_IMAGE else BRIDGE_PLUGINS="${npm_package_consolePlugin_name}=http://host.containers.internal:9001" - podman run --pull always --rm -p "$CONSOLE_PORT":9000 --env-file <(set | grep BRIDGE) $CONSOLE_IMAGE + podman run --pull always --arch amd64 --rm -p "$CONSOLE_PORT":9000 --env-file <(set | grep BRIDGE) $CONSOLE_IMAGE fi else BRIDGE_PLUGINS="${npm_package_consolePlugin_name}=http://host.docker.internal:9001" diff --git a/yarn.lock b/yarn.lock index a69680a9f..48e9a4f9b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,26 @@ # yarn lockfile v1 +"@apollo/client@3.10.8": + version "3.10.8" + resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.10.8.tgz#96b1548818e45fac752ec2bd318e5466d9ca26b5" + integrity sha512-UaaFEitRrPRWV836wY2L7bd3HRCfbMie1jlYMcmazFAK23MVhz/Uq7VG1nwbotPb5xzFsw5RF4Wnp2G3dWPM3g== + dependencies: + "@graphql-typed-document-node/core" "^3.1.1" + "@wry/caches" "^1.0.0" + "@wry/equality" "^0.5.6" + "@wry/trie" "^0.5.0" + graphql-tag "^2.12.6" + hoist-non-react-statics "^3.3.2" + optimism "^0.18.0" + prop-types "^15.7.2" + rehackt "^0.1.0" + response-iterator "^0.2.6" + symbol-observable "^4.0.0" + ts-invariant "^0.10.3" + tslib "^2.3.0" + zen-observable-ts "^1.2.5" + "@babel/code-frame@7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" @@ -52,6 +72,11 @@ dependencies: regenerator-runtime "^0.14.0" +"@babel/runtime@^7.27.6", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.7": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.6.tgz#d267a43cb1836dc4d182cce93ae75ba954ef6d2b" + integrity sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA== + "@babel/runtime@^7.3.1", "@babel/runtime@^7.8.3": version "7.28.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.2.tgz#2ae5a9d51cc583bd1f5673b3bb70d6d819682473" @@ -129,6 +154,11 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@graphql-typed-document-node/core@^3.1.1": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.2.0.tgz#5f3d96ec6b2354ad6d8a28bf216a1d97b5426861" + integrity sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ== + "@humanwhocodes/config-array@^0.5.0": version "0.5.0" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" @@ -463,6 +493,18 @@ react-dropzone "^14.3.5" tslib "^2.8.1" +"@patternfly/react-core@^6.4.0": + version "6.4.1" + resolved "https://registry.yarnpkg.com/@patternfly/react-core/-/react-core-6.4.1.tgz#219afce931b49804903f2e12156f9bb4d46f91b7" + integrity sha512-EUSV76Eifkt4R3q2JIaiB6/FHeQqOCttK1DQMXNoOCNa3ODkZ7H+KlMdminufMDfRzhwAgTVihZ62K9PFfc8Vg== + dependencies: + "@patternfly/react-icons" "^6.4.0" + "@patternfly/react-styles" "^6.4.0" + "@patternfly/react-tokens" "^6.4.0" + focus-trap "7.6.4" + react-dropzone "^14.3.5" + tslib "^2.8.1" + "@patternfly/react-data-view@^6.2.0": version "6.3.0" resolved "https://registry.yarnpkg.com/@patternfly/react-data-view/-/react-data-view-6.3.0.tgz#28b80d95f8c72c6c51e2f9adb061206012f8c737" @@ -595,6 +637,11 @@ resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.23.0.tgz#35390d0e7779626c026b11376da6789eb8389242" integrity sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA== +"@remix-run/router@1.23.2": + version "1.23.2" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.23.2.tgz#156c4b481c0bee22a19f7924728a67120de06971" + integrity sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w== + "@rtsao/scc@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" @@ -605,6 +652,21 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz#719df7fb41766bc143369eaa0dd56d8dc87c9958" integrity sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg== +"@stolostron/multicluster-sdk@^0.10.1": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@stolostron/multicluster-sdk/-/multicluster-sdk-0.10.1.tgz#b75f8f7393464ebf5e1571cf47ce5f8a3af68bcc" + integrity sha512-L8mgyJM5w9Q9XnzAvdAU1iHiKb8f6OMdYX7iJ0c28vVp9A/N2X6htB09ITyB+WR1v0F9m1OKua7MuL6NTzpNmA== + dependencies: + "@apollo/client" "3.10.8" + "@patternfly/react-core" "^6.4.0" + "@patternfly/react-styles" "^6.4.0" + graphql "^16.9.0" + react-i18next "15.6.1" + react-router-dom-v5-compat "^6.30.3" + react-transition-group "^4.4.5" + react-virtualized "^9.22.6" + zustand "^4.5.0" + "@tsconfig/node10@^1.0.7": version "1.0.11" resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" @@ -1377,6 +1439,34 @@ resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1" integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q== +"@wry/caches@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@wry/caches/-/caches-1.0.1.tgz#8641fd3b6e09230b86ce8b93558d44cf1ece7e52" + integrity sha512-bXuaUNLVVkD20wcGBWRyo7j9N3TxePEWFZj2Y+r9OoUzfqmavM84+mFykRicNsBqatba5JLay1t48wxaXaWnlA== + dependencies: + tslib "^2.3.0" + +"@wry/context@^0.7.0": + version "0.7.4" + resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.7.4.tgz#e32d750fa075955c4ab2cfb8c48095e1d42d5990" + integrity sha512-jmT7Sb4ZQWI5iyu3lobQxICu2nC/vbUhP0vIdd6tHC9PTfenmRmuIFqktc6GH9cgi+ZHnsLWPvfSvc4DrYmKiQ== + dependencies: + tslib "^2.3.0" + +"@wry/equality@^0.5.6": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.5.7.tgz#72ec1a73760943d439d56b7b1e9985aec5d497bb" + integrity sha512-BRFORjsTuQv5gxcXsuDXx6oGRhuVsEGwZy6LOzRRfgu+eSfxbhUQ9L9YtSEIuIjY/o7g3iWFjrc5eSY1GXP2Dw== + dependencies: + tslib "^2.3.0" + +"@wry/trie@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@wry/trie/-/trie-0.5.0.tgz#11e783f3a53f6e4cd1d42d2d1323f5bc3fa99c94" + integrity sha512-FNoYzHawTMk/6KMQoEG5O4PuioX19UbwdQKF44yw0nLfOypfQdjtfZzo/UIJWAJ23sNIFbD1Ug9lbaDGMwbqQA== + dependencies: + tslib "^2.3.0" + "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -2388,6 +2478,11 @@ cloneable-readable@^1.0.0: process-nextick-args "^2.0.0" readable-stream "^2.3.5" +clsx@^1.0.4: + version "1.2.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" + integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== + clsx@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" @@ -3204,6 +3299,14 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dom-helpers@^5.0.1, dom-helpers@^5.1.3: + version "5.2.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" + integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== + dependencies: + "@babel/runtime" "^7.8.7" + csstype "^3.0.2" + dom-serializer@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" @@ -4546,6 +4649,18 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== +graphql-tag@^2.12.6: + version "2.12.6" + resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1" + integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== + dependencies: + tslib "^2.1.0" + +graphql@^16.9.0: + version "16.12.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.12.0.tgz#28cc2462435b1ac3fdc6976d030cef83a0c13ac7" + integrity sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ== + growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" @@ -6915,6 +7030,16 @@ opener@^1.5.1: resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== +optimism@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.18.1.tgz#5cf16847921413dbb0ac809907370388b9c6335f" + integrity sha512-mLXNwWPa9dgFyDqkNi54sjDyNJ9/fTI6WGBLgnXku1vdKY/jovHfZT5r+aiVeFFLOz+foPNOm5YJ4mqgld2GBQ== + dependencies: + "@wry/caches" "^1.0.0" + "@wry/context" "^0.7.0" + "@wry/trie" "^0.5.0" + tslib "^2.3.0" + optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" @@ -7571,6 +7696,14 @@ react-helmet@^6.1.0: react-fast-compare "^3.1.1" react-side-effect "^2.1.0" +react-i18next@15.6.1: + version "15.6.1" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-15.6.1.tgz#a2747bed7768faef28fa28de32ff3811b2459c20" + integrity sha512-uGrzSsOUUe2sDBG/+FJq2J1MM+Y4368/QW8OLEKSFvnDflHBbZhSd1u3UkW0Z06rMhZmnB/AQrhCpYfE5/5XNg== + dependencies: + "@babel/runtime" "^7.27.6" + html-parse-stringify "^3.0.1" + react-i18next@^11.12.0, react-i18next@^11.7.3: version "11.18.6" resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.18.6.tgz#e159c2960c718c1314f1e8fcaa282d1c8b167887" @@ -7606,6 +7739,11 @@ react-jss@^10.10.0: theming "^3.3.0" tiny-warning "^1.0.2" +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + react-measure@^2.3.0: version "2.5.2" resolved "https://registry.yarnpkg.com/react-measure/-/react-measure-2.5.2.tgz#4ffc410e8b9cb836d9455a9ff18fc1f0fca67f89" @@ -7637,6 +7775,15 @@ react-router-dom-v5-compat@^6.11.2, react-router-dom-v5-compat@^6.30.0: history "^5.3.0" react-router "6.30.0" +react-router-dom-v5-compat@^6.30.3: + version "6.30.3" + resolved "https://registry.yarnpkg.com/react-router-dom-v5-compat/-/react-router-dom-v5-compat-6.30.3.tgz#0bd5ccc0d9fc0e81ceabade75acc55240279aaaf" + integrity sha512-WWZtwGYyoaeUDNrhzzDkh4JvN5nU0MIz80Dxim6pznQrfS+dv0mvtVoHTA6HlUl/OiJl7WWjbsQwjTnYXejEHg== + dependencies: + "@remix-run/router" "1.23.2" + history "^5.3.0" + react-router "6.30.3" + react-router-dom@5.3.x: version "5.3.4" resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.4.tgz#2ed62ffd88cae6db134445f4a0c0ae8b91d2e5e6" @@ -7679,11 +7826,40 @@ react-router@6.30.0: dependencies: "@remix-run/router" "1.23.0" +react-router@6.30.3: + version "6.30.3" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.30.3.tgz#994b3ccdbe0e81fe84d4f998100f62584dfbf1cf" + integrity sha512-XRnlbKMTmktBkjCLE8/XcZFlnHvr2Ltdr1eJX4idL55/9BbORzyZEaIkBFDhFGCEWBBItsVrDxwx3gnisMitdw== + dependencies: + "@remix-run/router" "1.23.2" + react-side-effect@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-2.1.2.tgz#dc6345b9e8f9906dc2eeb68700b615e0b4fe752a" integrity sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw== +react-transition-group@^4.4.5: + version "4.4.5" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" + integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== + dependencies: + "@babel/runtime" "^7.5.5" + dom-helpers "^5.0.1" + loose-envify "^1.4.0" + prop-types "^15.6.2" + +react-virtualized@^9.22.6: + version "9.22.6" + resolved "https://registry.yarnpkg.com/react-virtualized/-/react-virtualized-9.22.6.tgz#3ae2aa69eca61cf3af332e2f9d6b4aa5638786d5" + integrity sha512-U5j7KuUQt3AaMatlMJ0UJddqSiX+Km0YJxSqbAzIiGw5EmNz0khMyqP2hzgu4+QUtm+QPIrxzUX4raJxmVJnHg== + dependencies: + "@babel/runtime" "^7.7.2" + clsx "^1.0.4" + dom-helpers "^5.1.3" + loose-envify "^1.4.0" + prop-types "^15.7.2" + react-lifecycles-compat "^3.0.4" + react@17.0.2, react@^17.0.1: version "17.0.2" resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" @@ -7853,6 +8029,11 @@ regexpp@^3.1.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== +rehackt@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/rehackt/-/rehackt-0.1.0.tgz#a7c5e289c87345f70da8728a7eb878e5d03c696b" + integrity sha512-7kRDOuLHB87D/JESKxQoRwv4DzbIdwkAGQ7p6QKGdVlY1IZheUnVhlk/4UZlNUVxdAXpyxikE3URsG067ybVzw== + remove-bom-buffer@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" @@ -8010,6 +8191,11 @@ resolve@^2.0.0-next.5: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +response-iterator@^0.2.6: + version "0.2.25" + resolved "https://registry.yarnpkg.com/response-iterator/-/response-iterator-0.2.25.tgz#5e8dae715ed9ca68b37919f4eae0a90d3ab1ae64" + integrity sha512-15K4tT8X35W0zJ5bv3fAf4eEKqOwS7yzd+Bg6YEE9NLltVbPbuTcYo3J2AP6AMQGMJmJkFCG421+kP2/iCBfDA== + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -8904,6 +9090,11 @@ symbol-observable@^1.2.0: resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== +symbol-observable@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-4.0.0.tgz#5b425f192279e87f2f9b937ac8540d1984b39205" + integrity sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ== + symbol-tree@^3.2.1: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" @@ -9137,6 +9328,13 @@ trim-right@^1.0.1: resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" integrity sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw== +ts-invariant@^0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.10.3.tgz#3e048ff96e91459ffca01304dbc7f61c1f642f6c" + integrity sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ== + dependencies: + tslib "^2.1.0" + ts-loader@^9.5.1: version "9.5.4" resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.5.4.tgz#44b571165c10fb5a90744aa5b7e119233c4f4585" @@ -9201,7 +9399,7 @@ tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.6.2, tslib@^2.7.0, tslib@^2.8.1: +tslib@^2.0.0, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.6.2, tslib@^2.7.0, tslib@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== @@ -9443,6 +9641,11 @@ url-join@^2.0.5: resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.5.tgz#5af22f18c052a000a48d7b82c5e9c2e2feeda728" integrity sha512-c2H1fIgpUdwFRIru9HFno5DT73Ok8hg5oOb5AT3ayIgvCRfxgs2jyt5Slw8kEB7j3QUr6yJmMPDT/odjk7jXow== +use-sync-external-store@^1.2.2: + version "1.6.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz#b174bfa65cb2b526732d9f2ac0a408027876f32d" + integrity sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w== + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -10015,3 +10218,22 @@ yup@^0.32.11: nanoclone "^0.2.1" property-expr "^2.0.4" toposort "^2.0.2" + +zen-observable-ts@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-1.2.5.tgz#6c6d9ea3d3a842812c6e9519209365a122ba8b58" + integrity sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg== + dependencies: + zen-observable "0.8.15" + +zen-observable@0.8.15: + version "0.8.15" + resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" + integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ== + +zustand@^4.5.0: + version "4.5.7" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.5.7.tgz#7d6bb2026a142415dd8be8891d7870e6dbe65f55" + integrity sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw== + dependencies: + use-sync-external-store "^1.2.2"