diff --git a/app/components/chart-preview.tsx b/app/components/chart-preview.tsx index c241ebafe4..03fc94167e 100644 --- a/app/components/chart-preview.tsx +++ b/app/components/chart-preview.tsx @@ -3,6 +3,7 @@ import { Box, Theme, Typography } from "@mui/material"; import { makeStyles } from "@mui/styles"; import Head from "next/head"; import * as React from "react"; +import { useMemo } from "react"; import { ChartDataFilters } from "@/charts/shared/chart-data-filters"; import { useQueryFilters } from "@/charts/shared/chart-helpers"; @@ -19,9 +20,14 @@ import GenericChart from "@/components/common-chart"; import DebugPanel from "@/components/debug-panel"; import Flex from "@/components/flex"; import { HintYellow } from "@/components/hint"; +import { MetadataPanel } from "@/components/metadata-panel"; import { ChartConfig, DataSource, useConfiguratorState } from "@/configurator"; import { DataSetTable } from "@/configurator/components/datatable"; -import { useDataCubeMetadataQuery } from "@/graphql/query-hooks"; +import { flag } from "@/configurator/components/flag"; +import { + DimensionMetadataFragment, + useDataCubeMetadataWithComponentValuesQuery, +} from "@/graphql/query-hooks"; import { DataCubePublicationStatus } from "@/graphql/resolver-types"; import { useLocale } from "@/locales/use-locale"; import useEvent from "@/utils/use-event"; @@ -67,7 +73,7 @@ export const ChartPreviewInner = ({ const [state, dispatch] = useConfiguratorState(); const locale = useLocale(); const classes = useStyles(); - const [{ data: metaData }] = useDataCubeMetadataQuery({ + const [{ data: metaData }] = useDataCubeMetadataWithComponentValuesQuery({ variables: { iri: dataSetIri, sourceType: dataSource.type, @@ -84,6 +90,13 @@ export const ChartPreviewInner = ({ const handleToggleTableView = useEvent(() => setIsTablePreview((c) => !c)); + const allDimensions: DimensionMetadataFragment[] = useMemo(() => { + return [ + ...(metaData?.dataCubeByIri?.dimensions ?? []), + ...(metaData?.dataCubeByIri?.measures ?? []), + ]; + }, [metaData?.dataCubeByIri?.dimensions, metaData?.dataCubeByIri?.measures]); + return ( <> - - dispatch({ - type: "ACTIVE_FIELD_CHANGED", - value: "title", - }) - } > - {state.meta.title[locale] === "" ? ( - [ Title ] - ) : ( - state.meta.title[locale] + + dispatch({ + type: "ACTIVE_FIELD_CHANGED", + value: "title", + }) + } + > + {state.meta.title[locale] === "" ? ( + [ Title ] + ) : ( + state.meta.title[locale] + )} + + + {flag("metadata") && ( + )} - + {state.meta.title[locale] === "" diff --git a/app/components/chart-published.tsx b/app/components/chart-published.tsx index 3514dfea73..5fea70f156 100644 --- a/app/components/chart-published.tsx +++ b/app/components/chart-published.tsx @@ -2,7 +2,7 @@ import { Trans } from "@lingui/macro"; import { Box, Theme, Typography } from "@mui/material"; import { makeStyles } from "@mui/styles"; import * as React from "react"; -import { useEffect, useMemo } from "react"; +import { useEffect, useMemo, useRef } from "react"; import { ChartDataFilters } from "@/charts/shared/chart-data-filters"; import { isUsingImputation } from "@/charts/shared/imputation"; @@ -19,6 +19,7 @@ import { import GenericChart from "@/components/common-chart"; import Flex from "@/components/flex"; import { HintBlue, HintRed, HintYellow } from "@/components/hint"; +import { MetadataPanel } from "@/components/metadata-panel"; import { ChartConfig, ConfiguratorStatePublishing, @@ -27,12 +28,16 @@ import { PublishedConfiguratorStateProvider, } from "@/configurator"; import { DataSetTable } from "@/configurator/components/datatable"; +import { flag } from "@/configurator/components/flag"; import { parseDate } from "@/configurator/components/ui-helpers"; import { DEFAULT_DATA_SOURCE, useIsTrustedDataSource, } from "@/domain/datasource"; -import { useDataCubeMetadataQuery } from "@/graphql/query-hooks"; +import { + DimensionMetadataFragment, + useDataCubeMetadataWithComponentValuesQuery, +} from "@/graphql/query-hooks"; import { DataCubePublicationStatus } from "@/graphql/resolver-types"; import { useLocale } from "@/locales/use-locale"; import useEvent from "@/utils/use-event"; @@ -65,6 +70,7 @@ export const ChartPublished = ({ const useStyles = makeStyles((theme: Theme) => ({ root: { + position: "relative", display: "flex", flexGrow: 1, flexDirection: "column", @@ -91,7 +97,9 @@ export const ChartPublishedInner = ({ const locale = useLocale(); const isTrustedDataSource = useIsTrustedDataSource(dataSource); - const [{ data: metaData }] = useDataCubeMetadataQuery({ + const rootRef = useRef<HTMLDivElement>(null); + + const [{ data: metaData }] = useDataCubeMetadataWithComponentValuesQuery({ variables: { iri: dataSet, sourceType: dataSource.type, @@ -116,8 +124,15 @@ export const ChartPublishedInner = ({ } = useChartTablePreview(); const handleToggleTableView = useEvent(() => setIsTablePreview((c) => !c)); + const allDimensions: DimensionMetadataFragment[] = useMemo(() => { + return [ + ...(metaData?.dataCubeByIri?.dimensions ?? []), + ...(metaData?.dataCubeByIri?.measures ?? []), + ]; + }, [metaData?.dataCubeByIri?.dimensions, metaData?.dataCubeByIri?.measures]); + return ( - <Box className={classes.root}> + <Box className={classes.root} ref={rootRef}> <ChartErrorBoundary resetKeys={[chartConfig]}> {metaData?.dataCubeByIri?.publicationStatus === DataCubePublicationStatus.Draft && ( @@ -161,11 +176,21 @@ export const ChartPublishedInner = ({ </HintBlue> </Box> )} - {meta.title[locale] !== "" && ( + <Flex sx={{ justifyContent: "space-between", alignItems: "center" }}> <Typography component="div" variant="h2" mb={2}> {meta.title[locale]} </Typography> - )} + + {flag("metadata") && ( + <MetadataPanel + datasetIri={dataSet} + dataSource={dataSource} + dimensions={allDimensions} + container={rootRef.current} + /> + )} + </Flex> + {meta.description[locale] && ( <Typography component="div" variant="body1" mb={2}> {meta.description[locale]} diff --git a/app/components/chart-selection-tabs.tsx b/app/components/chart-selection-tabs.tsx index f183e13aaa..cecf31f299 100644 --- a/app/components/chart-selection-tabs.tsx +++ b/app/components/chart-selection-tabs.tsx @@ -195,10 +195,20 @@ const TabsInner = ({ }) => { return ( <Box display="flex" sx={{ width: "100%", alignItems: "flex-start" }}> - <Tabs value={0} sx={{ position: "relative", top: 1, flexGrow: 1 }}> - {/* TODO: Generate dynamically when chart composition is implemented */} + <Tabs + value={0} + TabIndicatorProps={{ style: { display: "none" } }} + sx={{ position: "relative", top: 1, flexGrow: 1 }} + > + {/* TODO: Generate dynamically when chart composition is implemented. Add useStyles */} <Tab - sx={{ p: 0, background: "white" }} + sx={{ + p: 0, + background: "white", + border: "1px solid", + borderBottomWidth: 0, + borderColor: "divider", + }} onClick={onActionButtonClick} label={ <TabContent iconName={getIconName(chartType)} editable={editable} /> diff --git a/app/components/metadata-panel.tsx b/app/components/metadata-panel.tsx new file mode 100644 index 0000000000..e78da41ed5 --- /dev/null +++ b/app/components/metadata-panel.tsx @@ -0,0 +1,328 @@ +import { t, Trans } from "@lingui/macro"; +import { TabContext, TabList, TabPanel } from "@mui/lab"; +import { + Box, + Button, + Drawer, + IconButton, + Input, + InputAdornment, + Tab, + Theme, + Typography, +} from "@mui/material"; +import { makeStyles } from "@mui/styles"; +import React, { useMemo, useState } from "react"; + +import { DataSource } from "@/configurator"; +import { DataSetMetadata } from "@/configurator/components/dataset-metadata"; +import { DRAWER_WIDTH } from "@/configurator/components/drawer"; +import { DimensionMetadataFragment } from "@/graphql/query-hooks"; +import { Icon, getDimensionIconName } from "@/icons"; +import SvgIcClose from "@/icons/components/IcClose"; +import useEvent from "@/utils/use-event"; + +import Flex from "./flex"; + +type Section = "general" | "data"; + +type State = { + open: boolean; + toggle: () => void; + activeSection: Section; + setActiveSection: (d: Section) => void; +}; + +const Context = React.createContext<State | undefined>(undefined); + +export const ContextProvider = ({ + children, +}: { + children: React.ReactNode; +}) => { + const [open, setOpen] = React.useState(false); + const [activeSection, setActiveSection] = React.useState<Section>("general"); + + const ctx = React.useMemo(() => { + return { + open, + toggle: () => setOpen(!open), + activeSection, + setActiveSection, + }; + }, [open, activeSection]); + + return <Context.Provider value={ctx}>{children}</Context.Provider>; +}; + +export const useContext = () => { + const ctx = React.useContext(Context); + + if (ctx === undefined) { + throw Error( + "You need to wrap your component in <ContextProvider /> to useContext()" + ); + } + + return ctx; +}; + +const useDrawerStyles = makeStyles<Theme, { top: number }>((theme) => { + return { + root: { + position: "static", + + "& > .MuiPaper-root": { + top: ({ top }) => top, + bottom: 0, + width: DRAWER_WIDTH + 1, + height: "auto", + paddingLeft: theme.spacing(4), + paddingRight: theme.spacing(4), + borderRight: `1px ${theme.palette.divider} solid`, + boxShadow: "none", + }, + }, + }; +}); + +const useOtherStyles = makeStyles<Theme>((theme) => { + return { + header: { + display: "flex", + alignItems: "center", + justifyContent: "space-between", + marginTop: theme.spacing(6), + marginBottom: theme.spacing(4), + }, + content: { + padding: theme.spacing(4), + }, + tabList: { + height: 40, + minHeight: 40, + marginBottom: theme.spacing(4), + + "& .MuiTab-root": { + height: 40, + minHeight: 40, + }, + }, + tabPanel: { + display: "flex", + flexDirection: "column", + gap: theme.spacing(4), + padding: 0, + }, + icon: { + display: "inline", + marginLeft: -6, + marginTop: -3, + marginRight: 2, + }, + search: { + marginTop: theme.spacing(2), + padding: "0px 12px", + width: "100%", + height: 40, + minHeight: 40, + }, + }; +}); + +export const MetadataPanel = ({ + datasetIri, + dataSource, + dimensions, + container, + top, +}: { + datasetIri: string; + dataSource: DataSource; + dimensions: DimensionMetadataFragment[]; + container?: HTMLDivElement | null; + top?: number; +}) => { + return ( + <ContextProvider> + <PanelInner + datasetIri={datasetIri} + dataSource={dataSource} + dimensions={dimensions} + container={container} + top={top} + /> + </ContextProvider> + ); +}; + +const PanelInner = ({ + datasetIri, + dataSource, + dimensions, + container, + top = 0, +}: { + datasetIri: string; + dataSource: DataSource; + dimensions: DimensionMetadataFragment[]; + container: HTMLDivElement | null | undefined; + top?: number; +}) => { + const drawerClasses = useDrawerStyles({ top }); + const otherClasses = useOtherStyles(); + const { open, toggle, activeSection, setActiveSection } = useContext(); + const handleToggle = useEvent(() => { + toggle(); + }); + + return ( + <> + <ToggleButton onClick={handleToggle} /> + + <Drawer + className={drawerClasses.root} + open={open} + anchor="left" + hideBackdrop + ModalProps={{ container }} + PaperProps={{ style: { position: "absolute" } }} + > + <Header onClose={handleToggle} /> + + <TabContext value={activeSection}> + <TabList + className={otherClasses.tabList} + onChange={(_, v) => { + setActiveSection(v); + }} + > + <Tab + value="general" + label={ + <Typography variant="body2" fontWeight="bold"> + <Trans id="controls.metadata-panel.section.general"> + General + </Trans> + </Typography> + } + /> + <Tab + value="data" + label={ + <Typography variant="body2" fontWeight="bold"> + <Trans id="controls.metadata-panel.section.data">Data</Trans> + </Typography> + } + /> + </TabList> + + <TabPanelGeneral datasetIri={datasetIri} dataSource={dataSource} /> + <TabPanelData dimensions={dimensions} /> + </TabContext> + + <Content /> + </Drawer> + </> + ); +}; + +const ToggleButton = ({ onClick }: { onClick: () => void }) => { + return ( + <Button component="a" variant="text" size="small" onClick={onClick}> + <Typography variant="body2"> + <Trans id="controls.metadata-panel.metadata">Metadata</Trans> + </Typography> + </Button> + ); +}; + +const Header = ({ onClose }: { onClose: () => void }) => { + const classes = useOtherStyles(); + + return ( + <div className={classes.header}> + <Typography variant="body2" fontWeight="bold"> + <Trans id="controls.metadata-panel.metadata">Metadata</Trans> + </Typography> + + <IconButton size="small" onClick={onClose}> + <SvgIcClose /> + </IconButton> + </div> + ); +}; + +const Content = () => { + const classes = useOtherStyles(); + + return <div className={classes.content}></div>; +}; + +const TabPanelGeneral = ({ + datasetIri, + dataSource, +}: { + datasetIri: string; + dataSource: DataSource; +}) => { + const classes = useOtherStyles(); + + return ( + <TabPanel className={classes.tabPanel} value="general"> + <DataSetMetadata dataSetIri={datasetIri} dataSource={dataSource} /> + </TabPanel> + ); +}; + +const TabPanelData = ({ + dimensions, +}: { + dimensions: DimensionMetadataFragment[]; +}) => { + const classes = useOtherStyles(); + const [searchInput, setSearchInput] = useState(""); + + const filteredDimensions = useMemo(() => { + return dimensions.filter( + (d) => + d.label.toLowerCase().includes(searchInput) || + d.description?.toLowerCase().includes(searchInput) + ); + }, [dimensions, searchInput]); + + return ( + <TabPanel className={classes.tabPanel} value="data"> + {/* Extract into a component (as it's also used in MultiFilter drawer?) */} + <Input + className={classes.search} + value={searchInput} + onChange={(e) => setSearchInput(e.target.value.toLowerCase())} + placeholder={t({ + id: "select.controls.metadata.search", + message: "Jump to...", + })} + startAdornment={ + <InputAdornment position="start"> + <Icon name="search" size={16} /> + </InputAdornment> + } + sx={{ typography: "body2" }} + /> + {filteredDimensions.map((d) => ( + <Box key={d.iri}> + <Flex> + <Icon + className={classes.icon} + name={getDimensionIconName(d.__typename)} + /> + <Typography variant="body2" fontWeight="bold"> + {d.label} + </Typography> + </Flex> + <Typography variant="body2">{d.description}</Typography> + </Box> + ))} + </TabPanel> + ); +}; diff --git a/app/configurator/components/configurator.tsx b/app/configurator/components/configurator.tsx index f09fb409fd..882822b28e 100644 --- a/app/configurator/components/configurator.tsx +++ b/app/configurator/components/configurator.tsx @@ -9,7 +9,10 @@ import { ChartPreview } from "@/components/chart-preview"; import { useConfiguratorState } from "@/configurator"; import { ChartAnnotationsSelector } from "@/configurator/components/chart-annotations-selector"; import { ChartConfigurator } from "@/configurator/components/chart-configurator"; -import { ConfiguratorDrawer } from "@/configurator/components/drawer"; +import { + ConfiguratorDrawer, + DRAWER_WIDTH, +} from "@/configurator/components/drawer"; import { PanelLayout, PanelLeftWrapper, @@ -129,7 +132,7 @@ const ConfigureChartStep = () => { hideBackdrop onClose={handleClosePanel} > - <div style={{ width: 319 }} data-testid="panel-drawer"> + <div style={{ width: DRAWER_WIDTH }} data-testid="panel-drawer"> <BackContainer> <Button variant="text" diff --git a/app/configurator/components/dataset-metadata.tsx b/app/configurator/components/dataset-metadata.tsx index f71ac30a2d..b146e08e2e 100644 --- a/app/configurator/components/dataset-metadata.tsx +++ b/app/configurator/components/dataset-metadata.tsx @@ -1,7 +1,6 @@ import { Trans } from "@lingui/macro"; import { Box, - BoxProps, Link, LinkProps, Typography, @@ -12,10 +11,6 @@ import { Link as MUILink } from "@mui/material"; import NextLink from "next/link"; import React, { ReactNode } from "react"; -import { - MotionBox, - smoothPresenceProps, -} from "@/configurator/components/presence"; import Tag from "@/configurator/components/tag"; import { DataSource } from "@/configurator/config-types"; import { truthy } from "@/domain/types"; @@ -31,11 +26,9 @@ import { makeOpenDataLink } from "@/utils/opendata"; export const DataSetMetadata = ({ dataSetIri, dataSource, - sx, }: { dataSetIri: string; dataSource: DataSource; - sx: BoxProps["sx"]; }) => { const locale = useLocale(); const formatDate = useFormatDate(); @@ -56,7 +49,7 @@ export const DataSetMetadata = ({ } return ( - <MotionBox sx={sx} key="dataset-metadata" {...smoothPresenceProps}> + <div> {cube.publisher && ( <> <DatasetMetadataTitle> @@ -132,7 +125,7 @@ export const DataSetMetadata = ({ ) : null} </DatasetMetadataBody> <DatasetTags cube={cube} /> - </MotionBox> + </div> ); }; @@ -149,14 +142,7 @@ const DatasetMetadataBody = ({ children: ReactNode; sx?: TypographyProps["sx"]; }) => ( - <Typography - variant="body2" - sx={{ - color: "grey.900", - mb: 5, - ...sx, - }} - > + <Typography variant="body2" sx={{ color: "grey.900", mb: 4, ...sx }}> {children} </Typography> ); diff --git a/app/configurator/components/drawer.tsx b/app/configurator/components/drawer.tsx index 6bccf30cdf..c2c801e32a 100644 --- a/app/configurator/components/drawer.tsx +++ b/app/configurator/components/drawer.tsx @@ -1,6 +1,8 @@ import { Drawer as MuiDrawer } from "@mui/material"; import { styled } from "@mui/material/styles"; +export const DRAWER_WIDTH = 319; + export const ConfiguratorDrawer = styled(MuiDrawer)(({ theme }) => ({ "&": { position: "static", diff --git a/app/configurator/components/select-dataset-step.tsx b/app/configurator/components/select-dataset-step.tsx index 9786eb4de2..d09339b5a0 100644 --- a/app/configurator/components/select-dataset-step.tsx +++ b/app/configurator/components/select-dataset-step.tsx @@ -31,6 +31,7 @@ import { bannerPresenceProps, MotionBox, navPresenceProps, + smoothPresenceProps, } from "@/configurator/components/presence"; import { useDataCubesQuery } from "@/graphql/query-hooks"; import { Icon } from "@/icons"; @@ -218,11 +219,16 @@ const SelectDatasetStepContent = () => { </Trans> </Button> </NextLink> - <DataSetMetadata + <MotionBox + key="dataset-metadata" sx={{ mt: 6 }} - dataSetIri={dataset} - dataSource={configState.dataSource} - /> + {...smoothPresenceProps} + > + <DataSetMetadata + dataSetIri={dataset} + dataSource={configState.dataSource} + /> + </MotionBox> </MotionBox> ) : ( <MotionBox diff --git a/app/graphql/queries/data-cubes.graphql b/app/graphql/queries/data-cubes.graphql index 7d948dc9c5..8185cada8c 100644 --- a/app/graphql/queries/data-cubes.graphql +++ b/app/graphql/queries/data-cubes.graphql @@ -154,6 +154,8 @@ query DataCubeMetadataWithComponentValues( iri title publisher + publicationStatus + expires identifier workExamples creator { diff --git a/app/graphql/query-hooks.ts b/app/graphql/query-hooks.ts index 9ad9552a6f..c4d52bf0ff 100644 --- a/app/graphql/query-hooks.ts +++ b/app/graphql/query-hooks.ts @@ -598,7 +598,7 @@ export type DataCubeMetadataWithComponentValuesQueryVariables = Exact<{ }>; -export type DataCubeMetadataWithComponentValuesQuery = { __typename: 'Query', dataCubeByIri?: Maybe<{ __typename: 'DataCube', iri: string, title: string, publisher?: Maybe<string>, identifier?: Maybe<string>, workExamples?: Maybe<Array<Maybe<string>>>, landingPage?: Maybe<string>, creator?: Maybe<{ __typename: 'DataCubeOrganization', iri: string }>, dimensions: Array<( +export type DataCubeMetadataWithComponentValuesQuery = { __typename: 'Query', dataCubeByIri?: Maybe<{ __typename: 'DataCube', iri: string, title: string, publisher?: Maybe<string>, publicationStatus: DataCubePublicationStatus, expires?: Maybe<string>, identifier?: Maybe<string>, workExamples?: Maybe<Array<Maybe<string>>>, landingPage?: Maybe<string>, creator?: Maybe<{ __typename: 'DataCubeOrganization', iri: string }>, dimensions: Array<( { __typename: 'GeoCoordinatesDimension' } & DimensionMetadata_GeoCoordinatesDimension_Fragment & HierarchyMetadata_GeoCoordinatesDimension_Fragment @@ -1107,6 +1107,8 @@ export const DataCubeMetadataWithComponentValuesDocument = gql` iri title publisher + publicationStatus + expires identifier workExamples creator { diff --git a/app/icons/components/IcGeographical.tsx b/app/icons/components/IcGeographical.tsx new file mode 100644 index 0000000000..a1e315bffc --- /dev/null +++ b/app/icons/components/IcGeographical.tsx @@ -0,0 +1,24 @@ +import * as React from "react"; + +function SvgIcGeographical(props: React.SVGProps<SVGSVGElement>) { + return ( + <svg + xmlns="http://www.w3.org/2000/svg" + viewBox="0 0 24 24" + width="1em" + height="1em" + {...props} + > + <g fill="none" fillRule="evenodd"> + <g> + <path + fill="currentColor" + d="M12,6 C14.7614237,6 17,8.19787482 17,10.9090908 C17,14.7272727 12,18 12,18 L11.9712483,17.9808455 C11.5654321,17.7080135 7,14.5575757 7,10.9090908 C7,8.19787482 9.23857628,6 12,6 Z M12,9.2727272 C11.0795254,9.2727272 10.3333333,10.0053522 10.3333333,10.9090908 C10.3333333,11.8128295 11.0795254,12.5454545 12,12.5454545 C12.9204746,12.5454545 13.6666667,11.8128295 13.6666667,10.9090908 C13.6666667,10.0053522 12.9204746,9.2727272 12,9.2727272 Z" + /> + </g> + </g> + </svg> + ); +} + +export default SvgIcGeographical; diff --git a/app/icons/components/IcNumerical.tsx b/app/icons/components/IcNumerical.tsx new file mode 100644 index 0000000000..48b7c48f17 --- /dev/null +++ b/app/icons/components/IcNumerical.tsx @@ -0,0 +1,24 @@ +import * as React from "react"; + +function SvgIcNumerical(props: React.SVGProps<SVGSVGElement>) { + return ( + <svg + xmlns="http://www.w3.org/2000/svg" + viewBox="0 0 24 24" + width="1em" + height="1em" + {...props} + > + <g fill="none" fillRule="evenodd"> + <g> + <path + fill="currentColor" + d="M5.24031008,8.13296399 L6.60206718,8.13296399 L6.60206718,15.867036 L5.06459948,15.867036 L5.06459948,9.89473684 L3.76873385,10.9584488 L3,9.9501385 L5.24031008,8.13296399 Z M8.79844961,15.867036 L8.79844961,14.5706371 C8.99612403,14.3859649 9.27433247,14.1237304 9.63307494,13.7839335 C9.9918174,13.4589104 10.3578811,13.089566 10.7312661,12.6759003 C11.1192937,12.2548476 11.4450904,11.8374885 11.7086563,11.4238227 C11.9722222,11.010157 12.1076658,10.6223453 12.1149871,10.2603878 C12.1076658,9.90581717 11.9795435,9.6398892 11.7306202,9.46260388 C11.4890181,9.30009234 11.1998277,9.21883657 10.8630491,9.21883657 C10.540913,9.21883657 10.2297588,9.27793167 9.92958656,9.39612188 C9.6294143,9.52169898 9.35120586,9.66943675 9.09496124,9.83933518 L8.97416021,8.55401662 C9.69164513,8.1920591 10.4493971,8.00738689 11.247416,8 C12.8141688,8 13.6158484,8.7534626 13.6524548,10.2603878 C13.6451335,10.6666667 13.5572782,11.0655586 13.3888889,11.4570637 C13.2131783,11.8485688 12.9788975,12.2289935 12.6860465,12.598338 C12.0710594,13.3444137 11.4304479,14.0277008 10.7642119,14.6481994 L13.8940568,14.6481994 L13.8940568,15.867036 L8.79844961,15.867036 Z M15.1459948,14.4265928 C15.6731266,14.6555863 16.2405254,14.7737765 16.8481912,14.7811634 C17.0165805,14.7811634 17.1959518,14.7590028 17.3863049,14.7146814 C17.5620155,14.6703601 17.7340655,14.6075716 17.9024548,14.5263158 C18.0708441,14.4376731 18.2062877,14.3194829 18.3087855,14.1717452 C18.4112834,14.0387812 18.4625323,13.8762696 18.4625323,13.6842105 C18.455211,13.2336103 18.2978036,12.9159741 17.9903101,12.7313019 C17.6828165,12.5614035 17.2764858,12.4764543 16.7713178,12.4764543 L16.0245478,12.4764543 L16.0245478,11.2576177 L16.7273902,11.2576177 C17.254522,11.2576177 17.668174,11.1689751 17.9683463,10.9916898 C18.2685185,10.8217913 18.4222653,10.5706371 18.4295866,10.2382271 C18.4295866,10.0387812 18.3966408,9.87257618 18.3307494,9.73961219 C18.2575366,9.6066482 18.1586994,9.50323176 18.0342377,9.42936288 C17.7853144,9.289012 17.4778208,9.21883657 17.1117571,9.21883657 C16.5040913,9.21883657 15.9293712,9.355494 15.3875969,9.62880886 L15.2997416,8.38781163 C15.9293712,8.13665743 16.6431955,8.00738689 17.4412145,8 C17.6901378,8 17.9573643,8.02216066 18.2428941,8.06648199 C18.535745,8.11819021 18.8102929,8.2179132 19.0665375,8.36565097 C19.3301034,8.50600185 19.546081,8.70544783 19.7144703,8.96398892 C19.8755383,9.22253001 19.959733,9.56232687 19.9670543,9.9833795 C19.959733,10.5004617 19.8242894,10.8993536 19.5607235,11.1800554 C19.2898363,11.468144 18.9493971,11.6860572 18.5394057,11.833795 L18.5394057,11.8559557 C19.0299311,11.9298246 19.3959948,12.132964 19.6375969,12.465374 C19.879199,12.7977839 20,13.2077562 20,13.6952909 C19.9926787,14.145891 19.9048234,14.5226223 19.7364341,14.8254848 C19.5534022,15.1209603 19.3154608,15.3573407 19.0226098,15.534626 C18.8761843,15.6084949 18.7260982,15.6749769 18.5723514,15.734072 C18.4112834,15.7931671 18.2465547,15.8448753 18.0781654,15.8891967 C17.7340655,15.9630656 17.3972868,16 17.0678295,16 C16.3503445,16 15.6804479,15.9150508 15.0581395,15.7451524 L15.1459948,14.4265928 Z" + /> + </g> + </g> + </svg> + ); +} + +export default SvgIcNumerical; diff --git a/app/icons/components/IcPointInTime.tsx b/app/icons/components/IcPointInTime.tsx new file mode 100644 index 0000000000..010e38554e --- /dev/null +++ b/app/icons/components/IcPointInTime.tsx @@ -0,0 +1,24 @@ +import * as React from "react"; + +function SvgIcPointInTime(props: React.SVGProps<SVGSVGElement>) { + return ( + <svg + xmlns="http://www.w3.org/2000/svg" + viewBox="0 0 24 24" + width="1em" + height="1em" + {...props} + > + <g fill="none" fillRule="evenodd"> + <g> + <path + fill="currentColor" + d="M17,8 L16,8 L16,6 L14,6 L14,8 L10,8 L10,6 L8,6 L8,8 L7,8 C6.44771525,8 6,8.44771525 6,9 L6,17 C6,17.5522847 6.44771525,18 7,18 L17,18 C17.5522847,18 18,17.5522847 18,17 L18,9 C18,8.44771525 17.5522847,8 17,8 Z M16,16 L8,16 L8,11 L16,11 L16,16 Z" + /> + </g> + </g> + </svg> + ); +} + +export default SvgIcPointInTime; diff --git a/app/icons/components/index.tsx b/app/icons/components/index.tsx index 83928474e0..94efeaf554 100644 --- a/app/icons/components/index.tsx +++ b/app/icons/components/index.tsx @@ -56,6 +56,7 @@ import { default as Filter } from "@/icons/components/IcFilter"; import { default as Folder } from "@/icons/components/IcFolder"; import { default as Formatting } from "@/icons/components/IcFormatting"; import { default as Forward } from "@/icons/components/IcForward"; +import { default as Geographical } from "@/icons/components/IcGeographical"; import { default as Google } from "@/icons/components/IcGoogle"; import { default as HintWarning } from "@/icons/components/IcHintWarning"; import { default as Image } from "@/icons/components/IcImage"; @@ -78,11 +79,13 @@ import { default as MobileLandscape } from "@/icons/components/IcMobileLandscape import { default as MobilePortrait } from "@/icons/components/IcMobilePortrait"; import { default as More } from "@/icons/components/IcMore"; import { default as Next } from "@/icons/components/IcNext"; +import { default as Numerical } from "@/icons/components/IcNumerical"; import { default as Organisations } from "@/icons/components/IcOrganisations"; import { default as Origin } from "@/icons/components/IcOrigin"; import { default as Pause } from "@/icons/components/IcPause"; import { default as Pdf } from "@/icons/components/IcPdf"; import { default as Play } from "@/icons/components/IcPlay"; +import { default as PointInTime } from "@/icons/components/IcPointInTime"; import { default as Previous } from "@/icons/components/IcPrevious"; import { default as Print } from "@/icons/components/IcPrint"; import { default as Refresh } from "@/icons/components/IcRefresh"; @@ -190,6 +193,7 @@ export const Icons = { folder: Folder, formatting: Formatting, forward: Forward, + geographical: Geographical, google: Google, hintWarning: HintWarning, image: Image, @@ -212,11 +216,13 @@ export const Icons = { mobilePortrait: MobilePortrait, more: More, next: Next, + numerical: Numerical, organisations: Organisations, origin: Origin, pause: Pause, pdf: Pdf, play: Play, + pointInTime: PointInTime, previous: Previous, print: Print, refresh: Refresh, diff --git a/app/icons/index.tsx b/app/icons/index.tsx index bf7fa07f22..a074e3da4a 100644 --- a/app/icons/index.tsx +++ b/app/icons/index.tsx @@ -1,6 +1,6 @@ import { ComponentProps } from "react"; -import { ChartType } from "@/configurator"; +import { ChartType, ComponentType } from "@/configurator/config-types"; import { IconName, Icons } from "@/icons/components"; export { Icons } from "./components"; @@ -16,6 +16,7 @@ export const Icon = ({ color?: string; name: IconName; } & ComponentProps<"svg">) => { + const { style, ...otherProps } = props; const IconComponent = Icons[name]; if (!IconComponent) { @@ -23,7 +24,15 @@ export const Icon = ({ return null; } - return <IconComponent width={size} height={size} color={color} {...props} />; + return ( + <IconComponent + width={size} + height={size} + color={color} + style={{ minWidth: size, minHeight: size, ...style }} + {...otherProps} + /> + ); }; export const getChartIcon = (chartType: ChartType): IconName => { @@ -42,5 +51,31 @@ export const getChartIcon = (chartType: ChartType): IconName => { return "chartScatterplot"; case "table": return "table"; + default: + const _exhaustiveCheck: never = chartType; + return _exhaustiveCheck; + } +}; + +export const getDimensionIconName = ( + dimensionType: ComponentType +): IconName => { + switch (dimensionType) { + case "GeoCoordinatesDimension": + case "GeoShapesDimension": + return "geographical"; + case "NominalDimension": + return "chartPie"; + case "NumericalMeasure": + return "numerical"; + case "OrdinalDimension": + return "sort"; + case "OrdinalMeasure": + return "sort"; + case "TemporalDimension": + return "pointInTime"; + default: + const _exhaustiveCheck: never = dimensionType; + return _exhaustiveCheck; } }; diff --git a/app/icons/svg/ic_geographical.svg b/app/icons/svg/ic_geographical.svg new file mode 100644 index 0000000000..af41e36d64 --- /dev/null +++ b/app/icons/svg/ic_geographical.svg @@ -0,0 +1,7 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> + <g fill="none" fill-rule="evenodd"> + <g> + <path d="M12,6 C14.7614237,6 17,8.19787482 17,10.9090908 C17,14.7272727 12,18 12,18 L11.9712483,17.9808455 C11.5654321,17.7080135 7,14.5575757 7,10.9090908 C7,8.19787482 9.23857628,6 12,6 Z M12,9.2727272 C11.0795254,9.2727272 10.3333333,10.0053522 10.3333333,10.9090908 C10.3333333,11.8128295 11.0795254,12.5454545 12,12.5454545 C12.9204746,12.5454545 13.6666667,11.8128295 13.6666667,10.9090908 C13.6666667,10.0053522 12.9204746,9.2727272 12,9.2727272 Z" fill="#454545"></path> + </g> + </g> +</svg> \ No newline at end of file diff --git a/app/icons/svg/ic_numerical.svg b/app/icons/svg/ic_numerical.svg new file mode 100644 index 0000000000..5d2b132b6d --- /dev/null +++ b/app/icons/svg/ic_numerical.svg @@ -0,0 +1,7 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> + <g fill="none" fill-rule="evenodd"> + <g> + <path d="M5.24031008,8.13296399 L6.60206718,8.13296399 L6.60206718,15.867036 L5.06459948,15.867036 L5.06459948,9.89473684 L3.76873385,10.9584488 L3,9.9501385 L5.24031008,8.13296399 Z M8.79844961,15.867036 L8.79844961,14.5706371 C8.99612403,14.3859649 9.27433247,14.1237304 9.63307494,13.7839335 C9.9918174,13.4589104 10.3578811,13.089566 10.7312661,12.6759003 C11.1192937,12.2548476 11.4450904,11.8374885 11.7086563,11.4238227 C11.9722222,11.010157 12.1076658,10.6223453 12.1149871,10.2603878 C12.1076658,9.90581717 11.9795435,9.6398892 11.7306202,9.46260388 C11.4890181,9.30009234 11.1998277,9.21883657 10.8630491,9.21883657 C10.540913,9.21883657 10.2297588,9.27793167 9.92958656,9.39612188 C9.6294143,9.52169898 9.35120586,9.66943675 9.09496124,9.83933518 L8.97416021,8.55401662 C9.69164513,8.1920591 10.4493971,8.00738689 11.247416,8 C12.8141688,8 13.6158484,8.7534626 13.6524548,10.2603878 C13.6451335,10.6666667 13.5572782,11.0655586 13.3888889,11.4570637 C13.2131783,11.8485688 12.9788975,12.2289935 12.6860465,12.598338 C12.0710594,13.3444137 11.4304479,14.0277008 10.7642119,14.6481994 L13.8940568,14.6481994 L13.8940568,15.867036 L8.79844961,15.867036 Z M15.1459948,14.4265928 C15.6731266,14.6555863 16.2405254,14.7737765 16.8481912,14.7811634 C17.0165805,14.7811634 17.1959518,14.7590028 17.3863049,14.7146814 C17.5620155,14.6703601 17.7340655,14.6075716 17.9024548,14.5263158 C18.0708441,14.4376731 18.2062877,14.3194829 18.3087855,14.1717452 C18.4112834,14.0387812 18.4625323,13.8762696 18.4625323,13.6842105 C18.455211,13.2336103 18.2978036,12.9159741 17.9903101,12.7313019 C17.6828165,12.5614035 17.2764858,12.4764543 16.7713178,12.4764543 L16.0245478,12.4764543 L16.0245478,11.2576177 L16.7273902,11.2576177 C17.254522,11.2576177 17.668174,11.1689751 17.9683463,10.9916898 C18.2685185,10.8217913 18.4222653,10.5706371 18.4295866,10.2382271 C18.4295866,10.0387812 18.3966408,9.87257618 18.3307494,9.73961219 C18.2575366,9.6066482 18.1586994,9.50323176 18.0342377,9.42936288 C17.7853144,9.289012 17.4778208,9.21883657 17.1117571,9.21883657 C16.5040913,9.21883657 15.9293712,9.355494 15.3875969,9.62880886 L15.2997416,8.38781163 C15.9293712,8.13665743 16.6431955,8.00738689 17.4412145,8 C17.6901378,8 17.9573643,8.02216066 18.2428941,8.06648199 C18.535745,8.11819021 18.8102929,8.2179132 19.0665375,8.36565097 C19.3301034,8.50600185 19.546081,8.70544783 19.7144703,8.96398892 C19.8755383,9.22253001 19.959733,9.56232687 19.9670543,9.9833795 C19.959733,10.5004617 19.8242894,10.8993536 19.5607235,11.1800554 C19.2898363,11.468144 18.9493971,11.6860572 18.5394057,11.833795 L18.5394057,11.8559557 C19.0299311,11.9298246 19.3959948,12.132964 19.6375969,12.465374 C19.879199,12.7977839 20,13.2077562 20,13.6952909 C19.9926787,14.145891 19.9048234,14.5226223 19.7364341,14.8254848 C19.5534022,15.1209603 19.3154608,15.3573407 19.0226098,15.534626 C18.8761843,15.6084949 18.7260982,15.6749769 18.5723514,15.734072 C18.4112834,15.7931671 18.2465547,15.8448753 18.0781654,15.8891967 C17.7340655,15.9630656 17.3972868,16 17.0678295,16 C16.3503445,16 15.6804479,15.9150508 15.0581395,15.7451524 L15.1459948,14.4265928 Z" stroke="#454545" stroke-width="0.2" fill="#454545"></path> + </g> + </g> +</svg> \ No newline at end of file diff --git a/app/icons/svg/ic_point_in_time.svg b/app/icons/svg/ic_point_in_time.svg new file mode 100644 index 0000000000..6dd6b9f16c --- /dev/null +++ b/app/icons/svg/ic_point_in_time.svg @@ -0,0 +1,7 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> + <g fill="none" fill-rule="evenodd"> + <g> + <path d="M17,8 L16,8 L16,6 L14,6 L14,8 L10,8 L10,6 L8,6 L8,8 L7,8 C6.44771525,8 6,8.44771525 6,9 L6,17 C6,17.5522847 6.44771525,18 7,18 L17,18 C17.5522847,18 18,17.5522847 18,17 L18,9 C18,8.44771525 17.5522847,8 17,8 Z M16,16 L8,16 L8,11 L16,11 L16,16 Z" fill="#454545"></path> + </g> + </g> +</svg> \ No newline at end of file diff --git a/app/locales/de/messages.po b/app/locales/de/messages.po index 079d1da5a5..160a807aa0 100644 --- a/app/locales/de/messages.po +++ b/app/locales/de/messages.po @@ -13,19 +13,19 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" -#: app/configurator/components/chart-configurator.tsx:657 +#: app/configurator/components/chart-configurator.tsx:677 msgid "Add filter" msgstr "Filter hinzufügen" -#: app/configurator/components/chart-configurator.tsx:630 +#: app/configurator/components/chart-configurator.tsx:650 msgid "Drag filters to reorganize" msgstr "Ziehen Sie die Filter per Drag & Drop, um sie neu zu organisieren" -#: app/configurator/components/chart-configurator.tsx:627 +#: app/configurator/components/chart-configurator.tsx:647 msgid "Move filter down" msgstr "Filter nach unten verschieben" -#: app/configurator/components/chart-configurator.tsx:624 +#: app/configurator/components/chart-configurator.tsx:644 msgid "Move filter up" msgstr "Filter nach oben verschieben" @@ -33,11 +33,11 @@ msgstr "Filter nach oben verschieben" msgid "No results" msgstr "Kein Ergebnis" -#: app/components/chart-preview.tsx:157 +#: app/components/chart-preview.tsx:181 msgid "annotation.add.description" msgstr "[ Ohne Beschreibung ]" -#: app/components/chart-preview.tsx:129 +#: app/components/chart-preview.tsx:145 msgid "annotation.add.title" msgstr "[ Ohne Titel ]" @@ -53,11 +53,11 @@ msgstr "Kategorien" msgid "browse.dataset.create-visualization" msgstr "Visualisierung von diesem Datensatz erstellen" -#: app/configurator/components/select-dataset-step.tsx:290 +#: app/configurator/components/select-dataset-step.tsx:296 msgid "browse.datasets.all-datasets" msgstr "Alle Datensätze" -#: app/configurator/components/select-dataset-step.tsx:183 +#: app/configurator/components/select-dataset-step.tsx:184 msgid "browse.datasets.description" msgstr "Erkunden Sie die vom LINDAS Linked Data Service bereitgestellten Datensätze, indem Sie entweder nach Kategorien oder Organisationen filtern oder direkt nach bestimmten Stichworten suchen. Klicken Sie auf einen Datensatz, um detailliertere Informationen zu erhalten und Ihre eigenen Visualisierungen zu erstellen." @@ -122,7 +122,7 @@ msgstr "Teilen" msgid "chart.map.layers.area" msgstr "Flächen" -#: app/configurator/components/chart-configurator.tsx:706 +#: app/configurator/components/chart-configurator.tsx:730 #: app/configurator/components/chart-options-selector.tsx:992 #: app/configurator/components/field-i18n.ts:31 msgid "chart.map.layers.base" @@ -186,11 +186,11 @@ msgstr "Normal" msgid "controls..interactiveFilters.time.defaultSettings" msgstr "Standardeinstellung" -#: app/configurator/components/chart-annotator.tsx:67 +#: app/configurator/components/chart-annotator.tsx:70 msgid "controls.annotator.add-description-warning" msgstr "Fügen Sie eine Beschreibung hinzu" -#: app/configurator/components/chart-annotator.tsx:57 +#: app/configurator/components/chart-annotator.tsx:60 msgid "controls.annotator.add-title-warning" msgstr "Füge einen Titel hinzu" @@ -327,7 +327,11 @@ msgstr "Beschreibung hinzufügen" msgid "controls.dimensionvalue.none" msgstr "Kein Filter" -#: app/configurator/components/filters.tsx:415 +#: app/configurator/components/chart-configurator.tsx:491 +msgid "controls.filter.interactive.toggle" +msgstr "" + +#: app/configurator/components/filters.tsx:417 msgid "controls.filter.nb-elements" msgstr "{0} von {1}" @@ -339,8 +343,7 @@ msgstr "Alle auswählen" msgid "controls.filter.select.none" msgstr "Alle abwählen" -#: app/configurator/components/chart-configurator.tsx:488 -#: app/configurator/components/filters.tsx:355 +#: app/configurator/components/filters.tsx:356 msgid "controls.filters.interactive.toggle" msgstr "Interaktive" @@ -348,15 +351,15 @@ msgstr "Interaktive" #~ msgid "controls.filters.select.filters" #~ msgstr "Filter" -#: app/configurator/components/filters.tsx:396 +#: app/configurator/components/filters.tsx:398 msgid "controls.filters.select.refresh-colors" msgstr "Farben auffrischen" -#: app/configurator/components/filters.tsx:380 +#: app/configurator/components/filters.tsx:382 msgid "controls.filters.select.reset-colors" msgstr "Farben zurücksetzen" -#: app/configurator/components/filters.tsx:373 +#: app/configurator/components/filters.tsx:375 msgid "controls.filters.select.selected-filters" msgstr "Ausgewählte Filter" @@ -393,7 +396,7 @@ msgstr "Nullen" #~ msgstr "Datenfilter" #: app/configurator/interactive-filters/interactive-filters-config-options.tsx:80 -#: app/configurator/interactive-filters/interactive-filters-configurator.tsx:109 +#: app/configurator/interactive-filters/interactive-filters-configurator.tsx:116 msgid "controls.interactive.filters.timeSlider" msgstr "Zeitschieber" @@ -442,11 +445,24 @@ msgstr "Italienisch" msgid "controls.measure" msgstr "Messwert" -#: app/configurator/components/configurator.tsx:146 +#: app/components/metadata-panel.tsx:228 +#: app/components/metadata-panel.tsx:240 +msgid "controls.metadata-panel.metadata" +msgstr "Metadata" + +#: app/components/metadata-panel.tsx:208 +msgid "controls.metadata-panel.section.data" +msgstr "Daten" + +#: app/components/metadata-panel.tsx:198 +msgid "controls.metadata-panel.section.general" +msgstr "Allgemeines" + +#: app/configurator/components/configurator.tsx:145 msgid "controls.nav.back-to-main" msgstr "Zurück zur Übersicht" -#: app/configurator/components/configurator.tsx:110 +#: app/configurator/components/configurator.tsx:112 msgid "controls.nav.back-to-preview" msgstr "Zurück zur Vorschau" @@ -470,7 +486,7 @@ msgstr "Aus" msgid "controls.scale.type" msgstr "Skalierungstyp" -#: app/components/form.tsx:625 +#: app/components/form.tsx:630 msgid "controls.search.clear" msgstr "Suche zurücksetzen" @@ -478,7 +494,7 @@ msgstr "Suche zurücksetzen" msgid "controls.section.additional-information" msgstr "Zusätzliche Informationen" -#: app/configurator/components/chart-configurator.tsx:547 +#: app/configurator/components/chart-configurator.tsx:562 msgid "controls.section.chart.options" msgstr "Diagramm-Einstellungen" @@ -490,11 +506,11 @@ msgstr "Spalten" msgid "controls.section.columnstyle" msgstr "Spaltenstil" -#: app/configurator/components/chart-configurator.tsx:565 +#: app/configurator/components/chart-configurator.tsx:584 msgid "controls.section.data.filters" msgstr "Filter" -#: app/configurator/components/chart-annotator.tsx:50 +#: app/configurator/components/chart-annotator.tsx:53 msgid "controls.section.description" msgstr "Titel & Beschreibung" @@ -519,8 +535,8 @@ msgstr "Fehlende Werte" msgid "controls.section.imputation.explanation" msgstr "Für diesen Diagrammtyp sollten fehlenden Werten Ersatzwerte zugewiesen werden. Entscheiden Sie sich für die Imputationslogik oder wechseln Sie zu einem anderen Diagrammtyp." -#: app/configurator/interactive-filters/interactive-filters-configurator.tsx:90 -#: app/configurator/interactive-filters/interactive-filters-configurator.tsx:129 +#: app/configurator/interactive-filters/interactive-filters-configurator.tsx:97 +#: app/configurator/interactive-filters/interactive-filters-configurator.tsx:136 msgid "controls.section.interactive.filters" msgstr "Interaktive Filter hinzufügen" @@ -548,11 +564,11 @@ msgstr "Tabellensortierung" msgid "controls.section.tableoptions" msgstr "Tabellenoptionen" -#: app/configurator/components/chart-annotator.tsx:30 +#: app/configurator/components/chart-annotator.tsx:28 msgid "controls.section.title.warning" msgstr "Fügen Sie einen Titel oder eine Beschreibung hinzu" -#: app/configurator/components/chart-configurator.tsx:539 +#: app/configurator/components/chart-configurator.tsx:554 #: app/configurator/components/chart-type-selector.tsx:131 #: app/configurator/table/table-chart-configurator.tsx:123 msgid "controls.select.chart.type" @@ -612,16 +628,16 @@ msgstr "Messwert auswählen" #~ msgid "controls.select.optional" #~ msgstr "optional" -#: app/configurator/components/filters.tsx:367 -#: app/configurator/components/filters.tsx:783 +#: app/configurator/components/filters.tsx:369 +#: app/configurator/components/filters.tsx:785 msgid "controls.set-filters" msgstr "Filter bearbeiten" -#: app/configurator/components/filters.tsx:791 +#: app/configurator/components/filters.tsx:793 msgid "controls.set-filters-caption" msgstr "Für beste Ergebnisse wählen Sie nicht mehr als 7 Werte für die Visualisierung aus" -#: app/configurator/components/filters.tsx:830 +#: app/configurator/components/filters.tsx:832 msgid "controls.set-values-apply" msgstr "Filter anwenden" @@ -745,15 +761,15 @@ msgstr "Cube IRI" msgid "data.source" msgstr "Datenquelle" -#: app/components/chart-published.tsx:148 +#: app/components/chart-published.tsx:159 msgid "data.source.notTrusted" msgstr "Dieses Diagramm verwendet keine vertrauenswürdige Datenquelle." -#: app/configurator/components/select-dataset-step.tsx:216 +#: app/configurator/components/select-dataset-step.tsx:217 msgid "dataset-preview.back-to-results" msgstr "Zurück zu den Datensätzen" -#: app/configurator/components/dataset-metadata.tsx:196 +#: app/configurator/components/dataset-metadata.tsx:182 msgid "dataset-preview.keywords" msgstr "Schlüsselwörter" @@ -765,7 +781,7 @@ msgstr "Datensatz" msgid "dataset.footnotes.updated" msgstr "Neuestes Update" -#: app/components/chart-published.tsx:157 +#: app/components/chart-published.tsx:168 msgid "dataset.hasImputedValues" msgstr "Einige Daten in diesem Datensatz fehlen und wurden interpoliert, um die Lücken zu füllen." @@ -773,28 +789,28 @@ msgstr "Einige Daten in diesem Datensatz fehlen und wurden interpoliert, um die msgid "dataset.includeDrafts" msgstr "Entwürfe einschließen" -#: app/configurator/components/dataset-metadata.tsx:78 +#: app/configurator/components/dataset-metadata.tsx:71 msgid "dataset.metadata.date.created" msgstr "Erstellungsdatum" -#: app/configurator/components/dataset-metadata.tsx:90 +#: app/configurator/components/dataset-metadata.tsx:83 msgid "dataset.metadata.email" msgstr "Kontaktstellen" -#: app/configurator/components/dataset-metadata.tsx:104 +#: app/configurator/components/dataset-metadata.tsx:97 msgid "dataset.metadata.furtherinformation" msgstr "Weitere Informationen" #: app/components/chart-footnotes.tsx:204 -#: app/configurator/components/dataset-metadata.tsx:114 +#: app/configurator/components/dataset-metadata.tsx:107 msgid "dataset.metadata.learnmore" msgstr "Erfahren Sie mehr über diesen Datensatz" -#: app/configurator/components/dataset-metadata.tsx:63 +#: app/configurator/components/dataset-metadata.tsx:56 msgid "dataset.metadata.source" msgstr "Quelle" -#: app/configurator/components/dataset-metadata.tsx:85 +#: app/configurator/components/dataset-metadata.tsx:78 msgid "dataset.metadata.version" msgstr "Version" @@ -810,13 +826,13 @@ msgstr "Relevanz" msgid "dataset.order.title" msgstr "Titel" -#: app/components/chart-preview.tsx:103 -#: app/components/chart-published.tsx:126 +#: app/components/chart-preview.tsx:112 +#: app/components/chart-published.tsx:137 #: app/configurator/components/dataset-preview.tsx:120 msgid "dataset.publicationStatus.draft.warning" msgstr "Achtung, dieser Datensatz ist im Entwurfs-Stadium.<0/><1>Diese Grafik nicht für Berichte verwenden.</1>" -#: app/components/chart-published.tsx:137 +#: app/components/chart-published.tsx:148 msgid "dataset.publicationStatus.expires.warning" msgstr "Achtung, dieser Datensatz ist abgelaufen.<0/><1>Diese Grafik nicht für Berichte verwenden.</1>" @@ -900,7 +916,7 @@ msgstr "Daten-Ladefehler" msgid "hint.how.to.share" msgstr "Sie können diese Visualisierung teilen oder sie einbetten. Zudem können Sie eine neue Visualisierung erstellen oder die gezeigte Visualisierung kopieren." -#: app/components/form.tsx:292 +#: app/components/form.tsx:297 #: app/components/hint.tsx:111 msgid "hint.loading.data" msgstr "Lade Daten …" @@ -999,10 +1015,14 @@ msgid "publication.share.mail.subject" msgstr "visualize.admin.ch" #: app/configurator/components/dataset-browse.tsx:378 -#: app/configurator/components/filters.tsx:800 +#: app/configurator/components/filters.tsx:802 msgid "select.controls.filters.search" msgstr "Suche" +#: app/components/metadata-panel.tsx:295 +msgid "select.controls.metadata.search" +msgstr "Springen zu..." + #: app/configurator/components/chart-controls/drag-and-drop-tab.tsx:101 msgid "table.column.no" msgstr "Spalte {0}" diff --git a/app/locales/en/messages.po b/app/locales/en/messages.po index 948a0e6747..829a4d95dc 100644 --- a/app/locales/en/messages.po +++ b/app/locales/en/messages.po @@ -13,19 +13,19 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" -#: app/configurator/components/chart-configurator.tsx:657 +#: app/configurator/components/chart-configurator.tsx:677 msgid "Add filter" msgstr "Add filter" -#: app/configurator/components/chart-configurator.tsx:630 +#: app/configurator/components/chart-configurator.tsx:650 msgid "Drag filters to reorganize" msgstr "Drag filters to reorganize" -#: app/configurator/components/chart-configurator.tsx:627 +#: app/configurator/components/chart-configurator.tsx:647 msgid "Move filter down" msgstr "Move filter down" -#: app/configurator/components/chart-configurator.tsx:624 +#: app/configurator/components/chart-configurator.tsx:644 msgid "Move filter up" msgstr "Move filter up" @@ -33,11 +33,11 @@ msgstr "Move filter up" msgid "No results" msgstr "No results" -#: app/components/chart-preview.tsx:157 +#: app/components/chart-preview.tsx:181 msgid "annotation.add.description" msgstr "[ No Description ]" -#: app/components/chart-preview.tsx:129 +#: app/components/chart-preview.tsx:145 msgid "annotation.add.title" msgstr "[ No Title ]" @@ -53,11 +53,11 @@ msgstr "Categories" msgid "browse.dataset.create-visualization" msgstr "Start a visualization" -#: app/configurator/components/select-dataset-step.tsx:290 +#: app/configurator/components/select-dataset-step.tsx:296 msgid "browse.datasets.all-datasets" msgstr "All datasets" -#: app/configurator/components/select-dataset-step.tsx:183 +#: app/configurator/components/select-dataset-step.tsx:184 msgid "browse.datasets.description" msgstr "Explore datasets provided by the LINDAS Linked Data Service by either filtering by categories or organisations or search directly for specific keywords. Click on a dataset to see more detailed information and start creating your own visualizations." @@ -142,7 +142,7 @@ msgstr "Areas" #~ msgid "chart.map.layers.area.discretization.quantize" #~ msgstr "Quantize (equal intervals)" -#: app/configurator/components/chart-configurator.tsx:706 +#: app/configurator/components/chart-configurator.tsx:730 #: app/configurator/components/chart-options-selector.tsx:992 #: app/configurator/components/field-i18n.ts:31 msgid "chart.map.layers.base" @@ -206,11 +206,11 @@ msgstr "Regular" msgid "controls..interactiveFilters.time.defaultSettings" msgstr "Default Settings" -#: app/configurator/components/chart-annotator.tsx:67 +#: app/configurator/components/chart-annotator.tsx:70 msgid "controls.annotator.add-description-warning" msgstr "Please add a description" -#: app/configurator/components/chart-annotator.tsx:57 +#: app/configurator/components/chart-annotator.tsx:60 msgid "controls.annotator.add-title-warning" msgstr "Please add a title" @@ -347,11 +347,11 @@ msgstr "Description" msgid "controls.dimensionvalue.none" msgstr "No Filter" -#: app/configurator/components/chart-configurator.tsx:487 -#~ msgid "controls.filter.interactive.toggle" -#~ msgstr "Interactive" +#: app/configurator/components/chart-configurator.tsx:491 +msgid "controls.filter.interactive.toggle" +msgstr "Interactive" -#: app/configurator/components/filters.tsx:415 +#: app/configurator/components/filters.tsx:417 msgid "controls.filter.nb-elements" msgstr "{0} of {1}" @@ -363,8 +363,7 @@ msgstr "Select all" msgid "controls.filter.select.none" msgstr "Select none" -#: app/configurator/components/chart-configurator.tsx:488 -#: app/configurator/components/filters.tsx:355 +#: app/configurator/components/filters.tsx:356 msgid "controls.filters.interactive.toggle" msgstr "Interactive" @@ -372,15 +371,15 @@ msgstr "Interactive" #~ msgid "controls.filters.select.filters" #~ msgstr "Filters" -#: app/configurator/components/filters.tsx:396 +#: app/configurator/components/filters.tsx:398 msgid "controls.filters.select.refresh-colors" msgstr "Refresh colors" -#: app/configurator/components/filters.tsx:380 +#: app/configurator/components/filters.tsx:382 msgid "controls.filters.select.reset-colors" msgstr "Reset colors" -#: app/configurator/components/filters.tsx:373 +#: app/configurator/components/filters.tsx:375 msgid "controls.filters.select.selected-filters" msgstr "Selected filters" @@ -417,7 +416,7 @@ msgstr "Zeros" #~ msgstr "Data Filters" #: app/configurator/interactive-filters/interactive-filters-config-options.tsx:80 -#: app/configurator/interactive-filters/interactive-filters-configurator.tsx:109 +#: app/configurator/interactive-filters/interactive-filters-configurator.tsx:116 msgid "controls.interactive.filters.timeSlider" msgstr "Time slider" @@ -466,11 +465,24 @@ msgstr "Italian" msgid "controls.measure" msgstr "Measure" -#: app/configurator/components/configurator.tsx:146 +#: app/components/metadata-panel.tsx:228 +#: app/components/metadata-panel.tsx:240 +msgid "controls.metadata-panel.metadata" +msgstr "Metadata" + +#: app/components/metadata-panel.tsx:208 +msgid "controls.metadata-panel.section.data" +msgstr "Data" + +#: app/components/metadata-panel.tsx:198 +msgid "controls.metadata-panel.section.general" +msgstr "General" + +#: app/configurator/components/configurator.tsx:145 msgid "controls.nav.back-to-main" msgstr "Back to main" -#: app/configurator/components/configurator.tsx:110 +#: app/configurator/components/configurator.tsx:112 msgid "controls.nav.back-to-preview" msgstr "Back to preview" @@ -490,7 +502,7 @@ msgstr "Off" msgid "controls.scale.type" msgstr "Scale type" -#: app/components/form.tsx:625 +#: app/components/form.tsx:630 msgid "controls.search.clear" msgstr "Clear search field" @@ -498,7 +510,7 @@ msgstr "Clear search field" msgid "controls.section.additional-information" msgstr "Additional information" -#: app/configurator/components/chart-configurator.tsx:547 +#: app/configurator/components/chart-configurator.tsx:562 msgid "controls.section.chart.options" msgstr "Chart Options" @@ -510,11 +522,11 @@ msgstr "Columns" msgid "controls.section.columnstyle" msgstr "Column Style" -#: app/configurator/components/chart-configurator.tsx:565 +#: app/configurator/components/chart-configurator.tsx:584 msgid "controls.section.data.filters" msgstr "Filters" -#: app/configurator/components/chart-annotator.tsx:50 +#: app/configurator/components/chart-annotator.tsx:53 msgid "controls.section.description" msgstr "Title & Description" @@ -539,8 +551,8 @@ msgstr "Missing values" msgid "controls.section.imputation.explanation" msgstr "For this chart type, replacement values should be assigned to missing values. Decide on the imputation logic or switch to another chart type." -#: app/configurator/interactive-filters/interactive-filters-configurator.tsx:90 -#: app/configurator/interactive-filters/interactive-filters-configurator.tsx:129 +#: app/configurator/interactive-filters/interactive-filters-configurator.tsx:97 +#: app/configurator/interactive-filters/interactive-filters-configurator.tsx:136 msgid "controls.section.interactive.filters" msgstr "Interactive Filters" @@ -568,11 +580,11 @@ msgstr "Table Sorting" msgid "controls.section.tableoptions" msgstr "Table Options" -#: app/configurator/components/chart-annotator.tsx:30 +#: app/configurator/components/chart-annotator.tsx:28 msgid "controls.section.title.warning" msgstr "Please add a title or description." -#: app/configurator/components/chart-configurator.tsx:539 +#: app/configurator/components/chart-configurator.tsx:554 #: app/configurator/components/chart-type-selector.tsx:131 #: app/configurator/table/table-chart-configurator.tsx:123 msgid "controls.select.chart.type" @@ -632,16 +644,16 @@ msgstr "Select a measure" #~ msgid "controls.select.optional" #~ msgstr "optional" -#: app/configurator/components/filters.tsx:367 -#: app/configurator/components/filters.tsx:783 +#: app/configurator/components/filters.tsx:369 +#: app/configurator/components/filters.tsx:785 msgid "controls.set-filters" msgstr "Edit filters" -#: app/configurator/components/filters.tsx:791 +#: app/configurator/components/filters.tsx:793 msgid "controls.set-filters-caption" msgstr "For best results, do not select more than 7 values in the visualization." -#: app/configurator/components/filters.tsx:830 +#: app/configurator/components/filters.tsx:832 msgid "controls.set-values-apply" msgstr "Apply filters" @@ -765,15 +777,15 @@ msgstr "Cube IRI" msgid "data.source" msgstr "Data source" -#: app/components/chart-published.tsx:148 +#: app/components/chart-published.tsx:159 msgid "data.source.notTrusted" msgstr "This chart is not using a trusted data source." -#: app/configurator/components/select-dataset-step.tsx:216 +#: app/configurator/components/select-dataset-step.tsx:217 msgid "dataset-preview.back-to-results" msgstr "Back to the datasets" -#: app/configurator/components/dataset-metadata.tsx:196 +#: app/configurator/components/dataset-metadata.tsx:182 msgid "dataset-preview.keywords" msgstr "Keywords" @@ -785,7 +797,7 @@ msgstr "Dataset" msgid "dataset.footnotes.updated" msgstr "Latest update" -#: app/components/chart-published.tsx:157 +#: app/components/chart-published.tsx:168 msgid "dataset.hasImputedValues" msgstr "Some data in this dataset is missing and has been interpolated to fill the gaps." @@ -793,7 +805,7 @@ msgstr "Some data in this dataset is missing and has been interpolated to fill t msgid "dataset.includeDrafts" msgstr "Include draft datasets" -#: app/configurator/components/dataset-metadata.tsx:78 +#: app/configurator/components/dataset-metadata.tsx:71 msgid "dataset.metadata.date.created" msgstr "Date created" @@ -801,24 +813,24 @@ msgstr "Date created" #~ msgid "dataset.metadata.date.footnotes.updated" #~ msgstr ", latest update: {0}" -#: app/configurator/components/dataset-metadata.tsx:90 +#: app/configurator/components/dataset-metadata.tsx:83 msgid "dataset.metadata.email" msgstr "Contact points" -#: app/configurator/components/dataset-metadata.tsx:104 +#: app/configurator/components/dataset-metadata.tsx:97 msgid "dataset.metadata.furtherinformation" msgstr "Further information" #: app/components/chart-footnotes.tsx:204 -#: app/configurator/components/dataset-metadata.tsx:114 +#: app/configurator/components/dataset-metadata.tsx:107 msgid "dataset.metadata.learnmore" msgstr "Learn more about the dataset" -#: app/configurator/components/dataset-metadata.tsx:63 +#: app/configurator/components/dataset-metadata.tsx:56 msgid "dataset.metadata.source" msgstr "Source" -#: app/configurator/components/dataset-metadata.tsx:85 +#: app/configurator/components/dataset-metadata.tsx:78 msgid "dataset.metadata.version" msgstr "Version" @@ -834,13 +846,13 @@ msgstr "Relevance" msgid "dataset.order.title" msgstr "Title" -#: app/components/chart-preview.tsx:103 -#: app/components/chart-published.tsx:126 +#: app/components/chart-preview.tsx:112 +#: app/components/chart-published.tsx:137 #: app/configurator/components/dataset-preview.tsx:120 msgid "dataset.publicationStatus.draft.warning" msgstr "Careful, this dataset is only a draft.<0/><1>Don't use for reporting!</1>" -#: app/components/chart-published.tsx:137 +#: app/components/chart-published.tsx:148 msgid "dataset.publicationStatus.expires.warning" msgstr "Careful, the data for this chart has expired.<0/><1>Don't use for reporting!</1>" @@ -924,7 +936,7 @@ msgstr "Data loading error" msgid "hint.how.to.share" msgstr "You can share this visualization by copying the URL or by embedding it on your own website. You can also create a new visualization from scratch or start by copying the visualization above." -#: app/components/form.tsx:292 +#: app/components/form.tsx:297 #: app/components/hint.tsx:111 msgid "hint.loading.data" msgstr "Loading data..." @@ -1023,10 +1035,14 @@ msgid "publication.share.mail.subject" msgstr "visualize.admin.ch" #: app/configurator/components/dataset-browse.tsx:378 -#: app/configurator/components/filters.tsx:800 +#: app/configurator/components/filters.tsx:802 msgid "select.controls.filters.search" msgstr "Search" +#: app/components/metadata-panel.tsx:295 +msgid "select.controls.metadata.search" +msgstr "Jump to..." + #: app/configurator/components/chart-controls/drag-and-drop-tab.tsx:101 msgid "table.column.no" msgstr "Column {0}" diff --git a/app/locales/fr/messages.po b/app/locales/fr/messages.po index a34e6f9ce1..57518c8a48 100644 --- a/app/locales/fr/messages.po +++ b/app/locales/fr/messages.po @@ -13,19 +13,19 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" -#: app/configurator/components/chart-configurator.tsx:657 +#: app/configurator/components/chart-configurator.tsx:677 msgid "Add filter" msgstr "Ajouter un filtre" -#: app/configurator/components/chart-configurator.tsx:630 +#: app/configurator/components/chart-configurator.tsx:650 msgid "Drag filters to reorganize" msgstr "Faites glisser les filtres pour les réorganiser" -#: app/configurator/components/chart-configurator.tsx:627 +#: app/configurator/components/chart-configurator.tsx:647 msgid "Move filter down" msgstr "Déplacer le filtre vers le bas" -#: app/configurator/components/chart-configurator.tsx:624 +#: app/configurator/components/chart-configurator.tsx:644 msgid "Move filter up" msgstr "Déplacer le filtre vers le haut" @@ -33,11 +33,11 @@ msgstr "Déplacer le filtre vers le haut" msgid "No results" msgstr "Aucun résultat" -#: app/components/chart-preview.tsx:157 +#: app/components/chart-preview.tsx:181 msgid "annotation.add.description" msgstr "[ Pas de description ]" -#: app/components/chart-preview.tsx:129 +#: app/components/chart-preview.tsx:145 msgid "annotation.add.title" msgstr "[ Pas de titre ]" @@ -53,11 +53,11 @@ msgstr "Catégories" msgid "browse.dataset.create-visualization" msgstr "Démarrer une visualisation" -#: app/configurator/components/select-dataset-step.tsx:290 +#: app/configurator/components/select-dataset-step.tsx:296 msgid "browse.datasets.all-datasets" msgstr "Tous les jeux de données" -#: app/configurator/components/select-dataset-step.tsx:183 +#: app/configurator/components/select-dataset-step.tsx:184 msgid "browse.datasets.description" msgstr "Explorez les jeux de données liés fournis par LINDAS, en filtrant par catégories ou organisations, ou en recherchant par mots-clés. Cliquez sur un ensemble de données pour afficher des informations plus détaillées et commencer à créer vos propres visualisations. " @@ -142,7 +142,7 @@ msgstr "Zones" #~ msgid "chart.map.layers.area.discretization.quantize" #~ msgstr "Intervalles égaux" -#: app/configurator/components/chart-configurator.tsx:706 +#: app/configurator/components/chart-configurator.tsx:730 #: app/configurator/components/chart-options-selector.tsx:992 #: app/configurator/components/field-i18n.ts:31 msgid "chart.map.layers.base" @@ -206,11 +206,11 @@ msgstr "Normal" msgid "controls..interactiveFilters.time.defaultSettings" msgstr "Paramètres d'origine" -#: app/configurator/components/chart-annotator.tsx:67 +#: app/configurator/components/chart-annotator.tsx:70 msgid "controls.annotator.add-description-warning" msgstr "Ajoutez une description au graphique" -#: app/configurator/components/chart-annotator.tsx:57 +#: app/configurator/components/chart-annotator.tsx:60 msgid "controls.annotator.add-title-warning" msgstr "Ajoutez un titre au graphique" @@ -347,11 +347,11 @@ msgstr "Description" msgid "controls.dimensionvalue.none" msgstr "Aucune filtre" -#: app/configurator/components/chart-configurator.tsx:487 -#~ msgid "controls.filter.interactive.toggle" -#~ msgstr "" +#: app/configurator/components/chart-configurator.tsx:491 +msgid "controls.filter.interactive.toggle" +msgstr "" -#: app/configurator/components/filters.tsx:415 +#: app/configurator/components/filters.tsx:417 msgid "controls.filter.nb-elements" msgstr "{0} sur {1}" @@ -363,8 +363,7 @@ msgstr "Tout sélectionner" msgid "controls.filter.select.none" msgstr "Tout déselectionner" -#: app/configurator/components/chart-configurator.tsx:488 -#: app/configurator/components/filters.tsx:355 +#: app/configurator/components/filters.tsx:356 msgid "controls.filters.interactive.toggle" msgstr "Interactif" @@ -372,15 +371,15 @@ msgstr "Interactif" #~ msgid "controls.filters.select.filters" #~ msgstr "Filtres" -#: app/configurator/components/filters.tsx:396 +#: app/configurator/components/filters.tsx:398 msgid "controls.filters.select.refresh-colors" msgstr "Renouveller les couleurs" -#: app/configurator/components/filters.tsx:380 +#: app/configurator/components/filters.tsx:382 msgid "controls.filters.select.reset-colors" msgstr "Réinitialiser les couleurs" -#: app/configurator/components/filters.tsx:373 +#: app/configurator/components/filters.tsx:375 msgid "controls.filters.select.selected-filters" msgstr "Filtres sélectionnés" @@ -417,7 +416,7 @@ msgstr "Zéros" #~ msgstr "Filtres de données" #: app/configurator/interactive-filters/interactive-filters-config-options.tsx:80 -#: app/configurator/interactive-filters/interactive-filters-configurator.tsx:109 +#: app/configurator/interactive-filters/interactive-filters-configurator.tsx:116 msgid "controls.interactive.filters.timeSlider" msgstr "Curseur temporel" @@ -461,11 +460,24 @@ msgstr "Italien" msgid "controls.measure" msgstr "Variable mesurée" -#: app/configurator/components/configurator.tsx:146 +#: app/components/metadata-panel.tsx:228 +#: app/components/metadata-panel.tsx:240 +msgid "controls.metadata-panel.metadata" +msgstr "Metadata" + +#: app/components/metadata-panel.tsx:208 +msgid "controls.metadata-panel.section.data" +msgstr "Données" + +#: app/components/metadata-panel.tsx:198 +msgid "controls.metadata-panel.section.general" +msgstr "Général" + +#: app/configurator/components/configurator.tsx:145 msgid "controls.nav.back-to-main" msgstr "Retour aux paramètres généraux" -#: app/configurator/components/configurator.tsx:110 +#: app/configurator/components/configurator.tsx:112 msgid "controls.nav.back-to-preview" msgstr "Retour à l'aperçu" @@ -485,7 +497,7 @@ msgstr "Inactif" msgid "controls.scale.type" msgstr "Type d'échelle" -#: app/components/form.tsx:625 +#: app/components/form.tsx:630 msgid "controls.search.clear" msgstr "Effacer la recherche" @@ -493,7 +505,7 @@ msgstr "Effacer la recherche" msgid "controls.section.additional-information" msgstr "Informations supplémentaires" -#: app/configurator/components/chart-configurator.tsx:547 +#: app/configurator/components/chart-configurator.tsx:562 msgid "controls.section.chart.options" msgstr "Paramètres graphiques" @@ -505,11 +517,11 @@ msgstr "Colonnes" msgid "controls.section.columnstyle" msgstr "Style de la colonne" -#: app/configurator/components/chart-configurator.tsx:565 +#: app/configurator/components/chart-configurator.tsx:584 msgid "controls.section.data.filters" msgstr "Filtres" -#: app/configurator/components/chart-annotator.tsx:50 +#: app/configurator/components/chart-annotator.tsx:53 msgid "controls.section.description" msgstr "Titre & description" @@ -534,8 +546,8 @@ msgstr "Valeurs manquantes" msgid "controls.section.imputation.explanation" msgstr "En raison du type de graphique sélectionné, les valeurs manquantes doivent être remplies. Décidez de la logique d'imputation ou choisissez un autre type de graphique." -#: app/configurator/interactive-filters/interactive-filters-configurator.tsx:90 -#: app/configurator/interactive-filters/interactive-filters-configurator.tsx:129 +#: app/configurator/interactive-filters/interactive-filters-configurator.tsx:97 +#: app/configurator/interactive-filters/interactive-filters-configurator.tsx:136 msgid "controls.section.interactive.filters" msgstr "Filtres interactifs" @@ -563,11 +575,11 @@ msgstr "Tri du tableau" msgid "controls.section.tableoptions" msgstr "Options du tableau" -#: app/configurator/components/chart-annotator.tsx:30 +#: app/configurator/components/chart-annotator.tsx:28 msgid "controls.section.title.warning" msgstr "Ajoutez un titre et une description" -#: app/configurator/components/chart-configurator.tsx:539 +#: app/configurator/components/chart-configurator.tsx:554 #: app/configurator/components/chart-type-selector.tsx:131 #: app/configurator/table/table-chart-configurator.tsx:123 msgid "controls.select.chart.type" @@ -627,16 +639,16 @@ msgstr "Sélectionner une variable" #~ msgid "controls.select.optional" #~ msgstr "optionnel" -#: app/configurator/components/filters.tsx:367 -#: app/configurator/components/filters.tsx:783 +#: app/configurator/components/filters.tsx:369 +#: app/configurator/components/filters.tsx:785 msgid "controls.set-filters" msgstr "Modifier les filtres" -#: app/configurator/components/filters.tsx:791 +#: app/configurator/components/filters.tsx:793 msgid "controls.set-filters-caption" msgstr "Pour de meilleurs résultats, ne sélectionnez pas plus de 7 valeurs dans la visualisation." -#: app/configurator/components/filters.tsx:830 +#: app/configurator/components/filters.tsx:832 msgid "controls.set-values-apply" msgstr "Appliquer les filtres" @@ -760,15 +772,15 @@ msgstr "IRI du cube" msgid "data.source" msgstr "Source des données" -#: app/components/chart-published.tsx:148 +#: app/components/chart-published.tsx:159 msgid "data.source.notTrusted" msgstr "Ce graphique n'utilise pas une source de données fiable." -#: app/configurator/components/select-dataset-step.tsx:216 +#: app/configurator/components/select-dataset-step.tsx:217 msgid "dataset-preview.back-to-results" msgstr "Revenir aux jeux de données" -#: app/configurator/components/dataset-metadata.tsx:196 +#: app/configurator/components/dataset-metadata.tsx:182 msgid "dataset-preview.keywords" msgstr "Mots clés" @@ -780,7 +792,7 @@ msgstr "Jeu de données" msgid "dataset.footnotes.updated" msgstr "Mise à jour" -#: app/components/chart-published.tsx:157 +#: app/components/chart-published.tsx:168 msgid "dataset.hasImputedValues" msgstr "Certaines données de cet ensemble de données sont manquantes et ont été interpolées pour combler les lacunes." @@ -788,28 +800,28 @@ msgstr "Certaines données de cet ensemble de données sont manquantes et ont é msgid "dataset.includeDrafts" msgstr "Inclure les brouillons" -#: app/configurator/components/dataset-metadata.tsx:78 +#: app/configurator/components/dataset-metadata.tsx:71 msgid "dataset.metadata.date.created" msgstr "Date de création" -#: app/configurator/components/dataset-metadata.tsx:90 +#: app/configurator/components/dataset-metadata.tsx:83 msgid "dataset.metadata.email" msgstr "Points de contact" -#: app/configurator/components/dataset-metadata.tsx:104 +#: app/configurator/components/dataset-metadata.tsx:97 msgid "dataset.metadata.furtherinformation" msgstr "Informations complémentaires" #: app/components/chart-footnotes.tsx:204 -#: app/configurator/components/dataset-metadata.tsx:114 +#: app/configurator/components/dataset-metadata.tsx:107 msgid "dataset.metadata.learnmore" msgstr "En savoir plus sur le jeu de données" -#: app/configurator/components/dataset-metadata.tsx:63 +#: app/configurator/components/dataset-metadata.tsx:56 msgid "dataset.metadata.source" msgstr "Source" -#: app/configurator/components/dataset-metadata.tsx:85 +#: app/configurator/components/dataset-metadata.tsx:78 msgid "dataset.metadata.version" msgstr "Version" @@ -825,13 +837,13 @@ msgstr "Pertinence" msgid "dataset.order.title" msgstr "Titre" -#: app/components/chart-preview.tsx:103 -#: app/components/chart-published.tsx:126 +#: app/components/chart-preview.tsx:112 +#: app/components/chart-published.tsx:137 #: app/configurator/components/dataset-preview.tsx:120 msgid "dataset.publicationStatus.draft.warning" msgstr "Attention, ce jeu de données est à l'état d'ébauche.<0/><1>Ne l'utilisez pas pour une publication!</1>" -#: app/components/chart-published.tsx:137 +#: app/components/chart-published.tsx:148 msgid "dataset.publicationStatus.expires.warning" msgstr "Attention, ce jeu de données est expiré.<0/><1>Ne l'utilisez pas pour une publication!</1>" @@ -915,7 +927,7 @@ msgstr "Problème de téléchargement des données" msgid "hint.how.to.share" msgstr "Vous pouvez partager cette visualisation en copiant l'URL ou en l'intégrant sur votre site Web. Vous pouvez également créer une toute nouvelle visualisation, ou bien copier et modifier la visualisation ci-dessus." -#: app/components/form.tsx:292 +#: app/components/form.tsx:297 #: app/components/hint.tsx:111 msgid "hint.loading.data" msgstr "Chargement des données..." @@ -1014,10 +1026,14 @@ msgid "publication.share.mail.subject" msgstr "visualize.admin.ch" #: app/configurator/components/dataset-browse.tsx:378 -#: app/configurator/components/filters.tsx:800 +#: app/configurator/components/filters.tsx:802 msgid "select.controls.filters.search" msgstr "Chercher" +#: app/components/metadata-panel.tsx:295 +msgid "select.controls.metadata.search" +msgstr "Sauter à..." + #: app/configurator/components/chart-controls/drag-and-drop-tab.tsx:101 msgid "table.column.no" msgstr "Colonne {0}" diff --git a/app/locales/it/messages.po b/app/locales/it/messages.po index 23e1da50fa..82391ac3d2 100644 --- a/app/locales/it/messages.po +++ b/app/locales/it/messages.po @@ -13,19 +13,19 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" -#: app/configurator/components/chart-configurator.tsx:657 +#: app/configurator/components/chart-configurator.tsx:677 msgid "Add filter" msgstr "Aggiungi filtro" -#: app/configurator/components/chart-configurator.tsx:630 +#: app/configurator/components/chart-configurator.tsx:650 msgid "Drag filters to reorganize" msgstr "Trascina i filtri per riorganizzarli" -#: app/configurator/components/chart-configurator.tsx:627 +#: app/configurator/components/chart-configurator.tsx:647 msgid "Move filter down" msgstr "Sposta il filtro in basso" -#: app/configurator/components/chart-configurator.tsx:624 +#: app/configurator/components/chart-configurator.tsx:644 msgid "Move filter up" msgstr "Sposta il filtro in alto" @@ -33,11 +33,11 @@ msgstr "Sposta il filtro in alto" msgid "No results" msgstr "Nessun risultato" -#: app/components/chart-preview.tsx:157 +#: app/components/chart-preview.tsx:181 msgid "annotation.add.description" msgstr "[ Nessuna descrizione ]" -#: app/components/chart-preview.tsx:129 +#: app/components/chart-preview.tsx:145 msgid "annotation.add.title" msgstr "[ Nessun titolo ]" @@ -53,11 +53,11 @@ msgstr "Categorie" msgid "browse.dataset.create-visualization" msgstr "Iniziare una visualizzazione" -#: app/configurator/components/select-dataset-step.tsx:290 +#: app/configurator/components/select-dataset-step.tsx:296 msgid "browse.datasets.all-datasets" msgstr "Tutti i set di dati" -#: app/configurator/components/select-dataset-step.tsx:183 +#: app/configurator/components/select-dataset-step.tsx:184 msgid "browse.datasets.description" msgstr "Esplora i set di dati forniti dal LINDAS Linked Data Service filtrando per categorie o organizzazioni oppure cercando direttamente per parole chiave specifiche. Clicca su un set di dati per vedere informazioni più dettagliate e iniziare a creare le tue visualizzazioni." @@ -142,7 +142,7 @@ msgstr "Aree" #~ msgid "chart.map.layers.area.discretization.quantize" #~ msgstr "Intervalli uguali" -#: app/configurator/components/chart-configurator.tsx:706 +#: app/configurator/components/chart-configurator.tsx:730 #: app/configurator/components/chart-options-selector.tsx:992 #: app/configurator/components/field-i18n.ts:31 msgid "chart.map.layers.base" @@ -206,11 +206,11 @@ msgstr "Regular" msgid "controls..interactiveFilters.time.defaultSettings" msgstr "Impostazioni predefinite" -#: app/configurator/components/chart-annotator.tsx:67 +#: app/configurator/components/chart-annotator.tsx:70 msgid "controls.annotator.add-description-warning" msgstr "Aggiungi una descrizione" -#: app/configurator/components/chart-annotator.tsx:57 +#: app/configurator/components/chart-annotator.tsx:60 msgid "controls.annotator.add-title-warning" msgstr "Aggiungi un titolo" @@ -347,11 +347,11 @@ msgstr "Descrizione" msgid "controls.dimensionvalue.none" msgstr "Nessun filtro" -#: app/configurator/components/chart-configurator.tsx:487 -#~ msgid "controls.filter.interactive.toggle" -#~ msgstr "" +#: app/configurator/components/chart-configurator.tsx:491 +msgid "controls.filter.interactive.toggle" +msgstr "" -#: app/configurator/components/filters.tsx:415 +#: app/configurator/components/filters.tsx:417 msgid "controls.filter.nb-elements" msgstr "{0} di {1}" @@ -363,8 +363,7 @@ msgstr "Seleziona tutti" msgid "controls.filter.select.none" msgstr "Deseleziona tutto" -#: app/configurator/components/chart-configurator.tsx:488 -#: app/configurator/components/filters.tsx:355 +#: app/configurator/components/filters.tsx:356 msgid "controls.filters.interactive.toggle" msgstr "Interattivo" @@ -372,15 +371,15 @@ msgstr "Interattivo" #~ msgid "controls.filters.select.filters" #~ msgstr "Filtri" -#: app/configurator/components/filters.tsx:396 +#: app/configurator/components/filters.tsx:398 msgid "controls.filters.select.refresh-colors" msgstr "Aggiorna i colori" -#: app/configurator/components/filters.tsx:380 +#: app/configurator/components/filters.tsx:382 msgid "controls.filters.select.reset-colors" msgstr "Reimpostare i colori" -#: app/configurator/components/filters.tsx:373 +#: app/configurator/components/filters.tsx:375 msgid "controls.filters.select.selected-filters" msgstr "Filtri selezionati" @@ -417,7 +416,7 @@ msgstr "Zeri" #~ msgstr "Filtri di dati" #: app/configurator/interactive-filters/interactive-filters-config-options.tsx:80 -#: app/configurator/interactive-filters/interactive-filters-configurator.tsx:109 +#: app/configurator/interactive-filters/interactive-filters-configurator.tsx:116 msgid "controls.interactive.filters.timeSlider" msgstr "Cursore del tempo" @@ -466,11 +465,24 @@ msgstr "Italiano" msgid "controls.measure" msgstr "Misura" -#: app/configurator/components/configurator.tsx:146 +#: app/components/metadata-panel.tsx:228 +#: app/components/metadata-panel.tsx:240 +msgid "controls.metadata-panel.metadata" +msgstr "Metadata" + +#: app/components/metadata-panel.tsx:208 +msgid "controls.metadata-panel.section.data" +msgstr "Dati" + +#: app/components/metadata-panel.tsx:198 +msgid "controls.metadata-panel.section.general" +msgstr "Generale" + +#: app/configurator/components/configurator.tsx:145 msgid "controls.nav.back-to-main" msgstr "Torna alle impostazioni generali" -#: app/configurator/components/configurator.tsx:110 +#: app/configurator/components/configurator.tsx:112 msgid "controls.nav.back-to-preview" msgstr "Torna all'anteprima" @@ -490,7 +502,7 @@ msgstr "Inattivo" msgid "controls.scale.type" msgstr "Tipo di scala" -#: app/components/form.tsx:625 +#: app/components/form.tsx:630 msgid "controls.search.clear" msgstr "Cancella la ricerca" @@ -498,7 +510,7 @@ msgstr "Cancella la ricerca" msgid "controls.section.additional-information" msgstr "Informazioni aggiuntive" -#: app/configurator/components/chart-configurator.tsx:547 +#: app/configurator/components/chart-configurator.tsx:562 msgid "controls.section.chart.options" msgstr "Opzioni del grafico" @@ -510,11 +522,11 @@ msgstr "Colonne" msgid "controls.section.columnstyle" msgstr "Stile della colonna" -#: app/configurator/components/chart-configurator.tsx:565 +#: app/configurator/components/chart-configurator.tsx:584 msgid "controls.section.data.filters" msgstr "Filtri" -#: app/configurator/components/chart-annotator.tsx:50 +#: app/configurator/components/chart-annotator.tsx:53 msgid "controls.section.description" msgstr "Titolo e descrizione" @@ -539,8 +551,8 @@ msgstr "Valori mancanti" msgid "controls.section.imputation.explanation" msgstr "Per questo tipo di grafico, i valori di sostituzione devono essere assegnati ai valori mancanti. Decidi la logica di imputazione o passa a un altro tipo di grafico." -#: app/configurator/interactive-filters/interactive-filters-configurator.tsx:90 -#: app/configurator/interactive-filters/interactive-filters-configurator.tsx:129 +#: app/configurator/interactive-filters/interactive-filters-configurator.tsx:97 +#: app/configurator/interactive-filters/interactive-filters-configurator.tsx:136 msgid "controls.section.interactive.filters" msgstr "Filtri interattivi" @@ -568,11 +580,11 @@ msgstr "Ordinamento della tabella" msgid "controls.section.tableoptions" msgstr "Opzioni della tabella" -#: app/configurator/components/chart-annotator.tsx:30 +#: app/configurator/components/chart-annotator.tsx:28 msgid "controls.section.title.warning" msgstr "Aggiungi un titolo o una descrizione" -#: app/configurator/components/chart-configurator.tsx:539 +#: app/configurator/components/chart-configurator.tsx:554 #: app/configurator/components/chart-type-selector.tsx:131 #: app/configurator/table/table-chart-configurator.tsx:123 msgid "controls.select.chart.type" @@ -632,16 +644,16 @@ msgstr "Seleziona una misura" #~ msgid "controls.select.optional" #~ msgstr "facoltativo" -#: app/configurator/components/filters.tsx:367 -#: app/configurator/components/filters.tsx:783 +#: app/configurator/components/filters.tsx:369 +#: app/configurator/components/filters.tsx:785 msgid "controls.set-filters" msgstr "Modificare i filtri" -#: app/configurator/components/filters.tsx:791 +#: app/configurator/components/filters.tsx:793 msgid "controls.set-filters-caption" msgstr "Pour de meilleurs résultats, ne sélectionnez pas plus de 7 valeurs dans la visualisation" -#: app/configurator/components/filters.tsx:830 +#: app/configurator/components/filters.tsx:832 msgid "controls.set-values-apply" msgstr "Appliquer les filtres" @@ -655,7 +667,7 @@ msgstr "Aggiungi una dimensione" #: app/configurator/components/chart-options-selector.tsx:512 msgid "controls.sorting.byAuto" -msgstr "" +msgstr "Automatico" #: app/configurator/components/chart-options-selector.tsx:506 #: app/configurator/components/chart-options-selector.tsx:516 @@ -765,15 +777,15 @@ msgstr "Cubo IRI" msgid "data.source" msgstr "Fonte di dati" -#: app/components/chart-published.tsx:148 +#: app/components/chart-published.tsx:159 msgid "data.source.notTrusted" msgstr "Questo grafico non utilizza una fonte di dati affidabile." -#: app/configurator/components/select-dataset-step.tsx:216 +#: app/configurator/components/select-dataset-step.tsx:217 msgid "dataset-preview.back-to-results" msgstr "Torna ai set di dati" -#: app/configurator/components/dataset-metadata.tsx:196 +#: app/configurator/components/dataset-metadata.tsx:182 msgid "dataset-preview.keywords" msgstr "Parole chiave" @@ -785,7 +797,7 @@ msgstr "Set di dati" msgid "dataset.footnotes.updated" msgstr "Ultimo aggiornamento" -#: app/components/chart-published.tsx:157 +#: app/components/chart-published.tsx:168 msgid "dataset.hasImputedValues" msgstr "In questo set di dati mancano alcuni dati. Questi sono stati interpolati per colmare le lacune.." @@ -793,28 +805,28 @@ msgstr "In questo set di dati mancano alcuni dati. Questi sono stati interpolati msgid "dataset.includeDrafts" msgstr "Includere le bozze" -#: app/configurator/components/dataset-metadata.tsx:78 +#: app/configurator/components/dataset-metadata.tsx:71 msgid "dataset.metadata.date.created" msgstr "Data di creazione" -#: app/configurator/components/dataset-metadata.tsx:90 +#: app/configurator/components/dataset-metadata.tsx:83 msgid "dataset.metadata.email" msgstr "Punti di contatto" -#: app/configurator/components/dataset-metadata.tsx:104 +#: app/configurator/components/dataset-metadata.tsx:97 msgid "dataset.metadata.furtherinformation" msgstr "Addizionali informazioni" #: app/components/chart-footnotes.tsx:204 -#: app/configurator/components/dataset-metadata.tsx:114 +#: app/configurator/components/dataset-metadata.tsx:107 msgid "dataset.metadata.learnmore" msgstr "Ulteriori informazioni sul set di dati" -#: app/configurator/components/dataset-metadata.tsx:63 +#: app/configurator/components/dataset-metadata.tsx:56 msgid "dataset.metadata.source" msgstr "Fonte" -#: app/configurator/components/dataset-metadata.tsx:85 +#: app/configurator/components/dataset-metadata.tsx:78 msgid "dataset.metadata.version" msgstr "versione" @@ -830,13 +842,13 @@ msgstr "Rilevanza" msgid "dataset.order.title" msgstr "Titolo" -#: app/components/chart-preview.tsx:103 -#: app/components/chart-published.tsx:126 +#: app/components/chart-preview.tsx:112 +#: app/components/chart-published.tsx:137 #: app/configurator/components/dataset-preview.tsx:120 msgid "dataset.publicationStatus.draft.warning" msgstr "Attenzione, questo set di dati è una bozza.<0/><1>Non utilizzare questo grafico per un rapporto!</1>" -#: app/components/chart-published.tsx:137 +#: app/components/chart-published.tsx:148 msgid "dataset.publicationStatus.expires.warning" msgstr "Attenzione, questo set di dati è scaduto.<0/><1>Non utilizzare questo grafico per un rapporto!</1>" @@ -920,7 +932,7 @@ msgstr "Problema di caricamento dei dati" msgid "hint.how.to.share" msgstr "È possibile condividere questa visualizzazione copiando l'URL o incorporandola nel vostro sito Web. Puoi anche creare una nuova visualizzazione partendo da zero oppure copiando e modificando la visualizzazione sopra." -#: app/components/form.tsx:292 +#: app/components/form.tsx:297 #: app/components/hint.tsx:111 msgid "hint.loading.data" msgstr "Caricamento dei dati..." @@ -1019,10 +1031,14 @@ msgid "publication.share.mail.subject" msgstr "visualize.admin.ch" #: app/configurator/components/dataset-browse.tsx:378 -#: app/configurator/components/filters.tsx:800 +#: app/configurator/components/filters.tsx:802 msgid "select.controls.filters.search" msgstr "Cerca" +#: app/components/metadata-panel.tsx:295 +msgid "select.controls.metadata.search" +msgstr "Salta a..." + #: app/configurator/components/chart-controls/drag-and-drop-tab.tsx:101 msgid "table.column.no" msgstr "Colonna {0}" diff --git a/app/test/__fixtures/data/DataCubeMetadataWithComponentValues-covid19.json b/app/test/__fixtures/data/DataCubeMetadataWithComponentValues-covid19.json index 1c06181fc4..80cff02242 100644 --- a/app/test/__fixtures/data/DataCubeMetadataWithComponentValues-covid19.json +++ b/app/test/__fixtures/data/DataCubeMetadataWithComponentValues-covid19.json @@ -4,6 +4,7 @@ "iri": "https://environment.ld.admin.ch/foen/COVID19VaccPersons_v2/2/", "title": "Covid19 Vaccinated Persons", "publisher": null, + "publicationStatus": "PUBLISHED", "dimensions": [ { "iri": "https://environment.ld.admin.ch/foen/COVID19VaccPersons_v2/date", diff --git a/app/themes/federal.tsx b/app/themes/federal.tsx index a23bedaef5..08a54c50f6 100644 --- a/app/themes/federal.tsx +++ b/app/themes/federal.tsx @@ -734,14 +734,6 @@ theme.components = { }, MuiTabs: { styleOverrides: { - root: { - "& .MuiTabs-flexContainer": { - gap: 4, - }, - "& .MuiTabs-indicator": { - display: "none", - }, - }, flexContainer: { height: 60, }, @@ -758,9 +750,6 @@ theme.components = { paddingBottom: 0, paddingLeft: 24, color: theme.palette.grey[900], - border: "1px solid", - borderBottomWidth: 0, - borderColor: theme.palette.divider, "&.Mui-selected": { color: theme.palette.primary.main,