diff --git a/src/components/atoms/Icon/Icons/update.svg b/src/components/atoms/Icon/Icons/update.svg
new file mode 100644
index 000000000..d0c283d23
--- /dev/null
+++ b/src/components/atoms/Icon/Icons/update.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/components/atoms/Icon/icons.ts b/src/components/atoms/Icon/icons.ts
index 312ce299f..af0e6d22a 100644
--- a/src/components/atoms/Icon/icons.ts
+++ b/src/components/atoms/Icon/icons.ts
@@ -31,6 +31,7 @@ import File from "./Icons/fileIcon.svg";
import PcIcon from "./Icons/pcIcon.svg";
import GoogleDriveIcon from "./Icons/googleDriveIcon.svg";
import SheetFileIcon from "./Icons/sheet-file.svg";
+import Update from "./Icons/update.svg";
// Asset
import AssetGrid from "./Icons/assetGrid.svg";
@@ -148,6 +149,7 @@ export default {
dataset: Dataset,
datasetAdd: DatasetAdd,
file: File,
+ update: Update,
googleDrive: GoogleDriveIcon,
sheetFile: SheetFileIcon,
computer: PcIcon,
diff --git a/src/components/atoms/TabCard/index.stories.tsx b/src/components/atoms/TabCard/index.stories.tsx
new file mode 100644
index 000000000..06a9e9c42
--- /dev/null
+++ b/src/components/atoms/TabCard/index.stories.tsx
@@ -0,0 +1,20 @@
+import React from "react";
+
+import { Meta, Story } from "@storybook/react";
+import TabCard, { Props } from ".";
+
+export default {
+ title: "atoms/TabCard",
+ component: TabCard,
+} as Meta;
+
+const SampleBody = () =>
Hello
;
+
+export const Default: Story = args => (
+
+
+
+);
+Default.args = {
+ name: "Property",
+};
diff --git a/src/components/atoms/TabCard/index.tsx b/src/components/atoms/TabCard/index.tsx
new file mode 100644
index 000000000..1f39b970a
--- /dev/null
+++ b/src/components/atoms/TabCard/index.tsx
@@ -0,0 +1,40 @@
+import React from "react";
+
+import { styled, useTheme } from "@reearth/theme";
+import Text from "@reearth/components/atoms/Text";
+import Flex from "../Flex";
+import Box from "../Box";
+
+export type Props = {
+ className?: string;
+ name?: string;
+ children?: React.ReactNode;
+};
+
+const TabCard: React.FC = ({ className, name, children }) => {
+ const theme = useTheme();
+ return (
+
+
+
+
+ {name}
+
+
+ {children}
+
+
+ );
+};
+
+const Body = styled.div`
+ width: calc(100% - 32px);
+ background-color: ${props => props.theme.properties.bg};
+ padding: 16px;
+`;
+
+export default TabCard;
diff --git a/src/components/atoms/Table/index.stories.tsx b/src/components/atoms/Table/index.stories.tsx
new file mode 100644
index 000000000..7ff87c682
--- /dev/null
+++ b/src/components/atoms/Table/index.stories.tsx
@@ -0,0 +1,57 @@
+import React from "react";
+
+import { Meta, Story } from "@storybook/react";
+import Table, { Props } from ".";
+
+export default {
+ title: "atoms/Table",
+ component: Table,
+} as Meta;
+
+const headers = ["title", "lat", "lng", "size", "color", "text"];
+type Rows = typeof headers[number];
+type Item = { [k in Rows]: string | number };
+const data: Item[] = [
+ {
+ title: "Japan",
+ lat: 35.03,
+ lng: 135.71,
+ size: 10,
+ color: "#3d86fa",
+ text: "short text",
+ },
+ {
+ title: "America",
+ lat: 50.1,
+ lng: 170.71,
+ size: 40,
+ color: "#ffffff",
+ text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
+ },
+];
+
+export const Default: Story> = args => ;
+
+export const Scroll: Story> = args => ;
+export const Auto: Story> = args => ;
+
+Default.args = {
+ headers,
+ items: data,
+ scroll: false,
+};
+
+Scroll.args = {
+ headers,
+ items: data,
+ layout: "fixed",
+ columnWidth: "100px",
+ width: "400px",
+};
+
+Auto.args = {
+ headers,
+ items: data,
+ layout: "auto",
+ scroll: false,
+};
diff --git a/src/components/atoms/Table/index.tsx b/src/components/atoms/Table/index.tsx
new file mode 100644
index 000000000..b0345ed87
--- /dev/null
+++ b/src/components/atoms/Table/index.tsx
@@ -0,0 +1,115 @@
+import React from "react";
+
+import theme, { fonts, styled } from "@reearth/theme";
+import { TypographySize } from "@reearth/theme/fonts";
+
+export type Props = {
+ className?: string;
+ headers?: (keyof T)[];
+ items?: T[];
+ bg?: string;
+ borderColor?: string;
+ textColor?: string;
+ textSize?: TypographySize;
+ layout?: "auto" | "fixed";
+ textAlign?: "left" | "center" | "right";
+ width?: string;
+ columnWidth?: string;
+ columnHeight?: string;
+ scroll?: boolean;
+ multiLine?: boolean;
+};
+
+export default function Table({
+ className,
+ width,
+ headers,
+ items,
+ bg,
+ borderColor,
+ textColor,
+ textSize = "s",
+ layout = "auto",
+ textAlign = "left",
+ columnWidth,
+ columnHeight,
+ scroll = true,
+ multiLine = false,
+}: Props): JSX.Element | null {
+ return (
+
+
+
+ {headers?.map((h, i) => (
+
+ {h}
+
+ ))}
+
+
+
+ {items?.map((item, i) => {
+ return (
+
+ {headers?.map((h, i) => {
+ return {item[h]};
+ })}
+
+ );
+ })}
+
+
+ );
+}
+
+const StyledTable = styled.table<{
+ bg?: string;
+ borderColor?: string;
+ textColor?: string;
+ textSize?: number;
+ layout?: "auto" | "fixed";
+ textAlign?: "left" | "center" | "right";
+ multiLine?: boolean;
+ columnWidth?: string;
+ columnHeight?: string;
+ scroll?: boolean;
+ width?: string;
+}>`
+ table-layout: ${({ layout }) => layout};
+ text-align: ${({ textAlign }) => textAlign};
+ white-space: ${({ multiLine }) => (multiLine ? "normal" : "nowrap")};
+ background: ${({ bg, theme }) => (bg ? bg : theme.main.bg)};
+ border-color: ${({ borderColor, theme }) => (borderColor ? borderColor : theme.main.lighterBg)};
+ color: ${({ textColor }) => (textColor ? textColor : theme.main.text)};
+ font-size: ${({ textSize }) => `${textSize}px`};
+ width: ${({ width }) => (width ? width : "100%")};
+ height: ${({ columnHeight }) => columnHeight};
+ overflow: ${({ scroll }) => (scroll ? "scroll" : "hidden")};
+ display: block;
+`;
+
+const StyledTh = styled.th<{ width?: string }>`
+ padding: ${({ theme }) => theme.metrics.s}px;
+ font-weight: ${fonts.weight.normal};
+ width: ${({ width }) => width};
+ overflow: hidden;
+ text-overflow: ellipsis;
+`;
+
+const StyledTd = styled.td`
+ padding: ${({ theme }) => theme.metrics.s}px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+`;
diff --git a/src/components/molecules/EarthEditor/DatasetInfoPane/DatasetProperty/PropertyItem/index.tsx b/src/components/molecules/EarthEditor/DatasetInfoPane/DatasetProperty/PropertyItem/index.tsx
new file mode 100644
index 000000000..9d9ce8957
--- /dev/null
+++ b/src/components/molecules/EarthEditor/DatasetInfoPane/DatasetProperty/PropertyItem/index.tsx
@@ -0,0 +1,68 @@
+import React, { useCallback, useState } from "react";
+import { useIntl } from "react-intl";
+
+import Button from "@reearth/components/atoms/Button";
+import Flex from "@reearth/components/atoms/Flex";
+import SelectField from "@reearth/components/atoms/SelectBox";
+import Text from "@reearth/components/atoms/Text";
+import { styled } from "@reearth/theme";
+
+export type PrimitiveItem = { name: string; extensionId: string; icon: string; pluginId: string };
+
+export type Props = {
+ primitiveItems?: PrimitiveItem[];
+ onCreateLayerGroup?: (pluginId: string, extensionId: string) => void;
+};
+
+const DatasetPropertyItem: React.FC = ({ primitiveItems, onCreateLayerGroup }) => {
+ const intl = useIntl();
+ const [selectedPrimitiveType, selectPrimitiveType] = useState("");
+
+ const handlePrimitiveTypeChange = (type: string) => {
+ if (primitiveItems?.map(p => p.extensionId).includes(type)) {
+ selectPrimitiveType(type);
+ }
+ };
+
+ const handleSubmit = useCallback(() => {
+ const item = primitiveItems?.find(p => p.extensionId === selectedPrimitiveType);
+ if (!item) return;
+ onCreateLayerGroup?.(item?.pluginId, item?.extensionId);
+ }, [onCreateLayerGroup, primitiveItems, selectedPrimitiveType]);
+
+ const convertPrimitiveItemToDatasetPropertyItem = (
+ items?: PrimitiveItem[],
+ ): { key: string; label: string; icon: string }[] => {
+ return items?.map(i => ({ key: i.extensionId, label: i.name, icon: i.icon })) || [];
+ };
+ return (
+
+
+
+ {intl.formatMessage({ defaultMessage: "Layer style" })}
+
+
+
+
+
+
+
+ );
+};
+
+const StyledButton = styled(Button)`
+ width: 80px;
+ margin-left: auto;
+`;
+
+export default DatasetPropertyItem;
diff --git a/src/components/molecules/EarthEditor/DatasetInfoPane/index.stories.tsx b/src/components/molecules/EarthEditor/DatasetInfoPane/index.stories.tsx
new file mode 100644
index 000000000..a8c47c5ac
--- /dev/null
+++ b/src/components/molecules/EarthEditor/DatasetInfoPane/index.stories.tsx
@@ -0,0 +1,15 @@
+import React from "react";
+
+import { Meta, Story } from "@storybook/react";
+import DatasetInfoPane, { Props } from ".";
+
+export default {
+ title: "molecules/EarthEditor/DatasetInfoPane",
+ component: DatasetInfoPane,
+} as Meta;
+
+export const Default: Story = args => {
+ return ;
+};
+
+Default.args = {};
diff --git a/src/components/molecules/EarthEditor/DatasetInfoPane/index.tsx b/src/components/molecules/EarthEditor/DatasetInfoPane/index.tsx
new file mode 100644
index 000000000..c2c262a33
--- /dev/null
+++ b/src/components/molecules/EarthEditor/DatasetInfoPane/index.tsx
@@ -0,0 +1,64 @@
+import React from "react";
+import { useIntl } from "react-intl";
+
+import Flex from "@reearth/components/atoms/Flex";
+import TabCard from "@reearth/components/atoms/TabCard";
+import Table from "@reearth/components/atoms/Table";
+import { useTheme } from "@reearth/theme";
+
+import DatasetPropertyItem, {
+ PrimitiveItem as PrimitiveItemType,
+} from "./DatasetProperty/PropertyItem";
+
+export type PrimitiveItem = PrimitiveItemType;
+
+export type Props = {
+ className?: string;
+ datasets?: { [key: string]: string }[];
+ datasetHeaders?: string[];
+ primitiveItems?: PrimitiveItem[];
+ onCreateLayerGroup?: (pluginId: string, extensionId: string) => void;
+};
+
+const DatasetInfoPane: React.FC = ({
+ datasetHeaders,
+ datasets,
+ primitiveItems,
+ onCreateLayerGroup,
+}) => {
+ const intl = useIntl();
+ const theme = useTheme();
+ return (
+
+
+
+ {/*
+ from PC file
+ */}
+
+ {/* */}
+
+
+
+
+
+
+ );
+};
+
+export default DatasetInfoPane;
diff --git a/src/components/molecules/EarthEditor/DatasetPane/DatasetSchemaCell/hooks.ts b/src/components/molecules/EarthEditor/DatasetPane/DatasetSchemaCell/hooks.ts
deleted file mode 100644
index 12fb4e113..000000000
--- a/src/components/molecules/EarthEditor/DatasetPane/DatasetSchemaCell/hooks.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { useDrag } from "@reearth/util/use-dnd";
-
-export default (onDrop?: (layerId: string, index?: number) => void) => {
- const { ref } = useDrag<"datasetSchema">(
- { type: "datasetSchema" },
- false,
- async (item, dropper) => {
- if (!dropper || (dropper.type !== "earth" && dropper.type !== "layer")) return;
- onDrop?.(dropper.layerId, dropper.type === "layer" ? dropper.index : undefined);
- },
- );
-
- return ref;
-};
diff --git a/src/components/molecules/EarthEditor/DatasetPane/DatasetSchemaCell/index.tsx b/src/components/molecules/EarthEditor/DatasetPane/DatasetSchemaCell/index.tsx
index 63500e19a..08036be81 100644
--- a/src/components/molecules/EarthEditor/DatasetPane/DatasetSchemaCell/index.tsx
+++ b/src/components/molecules/EarthEditor/DatasetPane/DatasetSchemaCell/index.tsx
@@ -1,36 +1,37 @@
-import React, { useState } from "react";
+import React, { useCallback, useState } from "react";
import Icon from "@reearth/components/atoms/Icon";
import { styled, fonts } from "@reearth/theme";
import DatasetDeleteModal from "../DatasetDeleteModal";
-import useHooks from "./hooks";
-
export type DatasetSchemaProps = {
className?: string;
id?: string;
name?: string;
totalCount?: number;
- onDrop?: (layerId: string, index?: number) => void;
onRemove?: (schemaId: string) => void;
selected?: boolean;
+ selectDatasetSchema?: (datasetSchemaId: string) => void;
};
const DatasetSchemaCell: React.FC = ({
className,
id,
- onDrop,
onRemove,
name,
totalCount,
selected,
+ selectDatasetSchema,
}) => {
- const ref = useHooks(onDrop);
+ const handleSelect = useCallback(() => {
+ if (!id) return;
+ selectDatasetSchema?.(id);
+ }, [id, selectDatasetSchema]);
const [showDeleteModal, setDeleteModal] = useState(false);
return (
-
+
{name}
({totalCount ?? ""})
@@ -47,8 +48,8 @@ const DatasetSchemaCell: React.FC = ({
};
const Wrapper = styled.div>`
- background-color: ${props =>
- props.selected ? props.theme.layers.paleBg : props.theme.layers.bg};
+ background-color: ${({ selected, theme }) =>
+ selected ? theme.layers.selectedLayer : "transparent"};
display: flex;
align-items: center;
font-size: ${fonts.sizes.xs}px;
@@ -58,7 +59,7 @@ const Wrapper = styled.div>`
color: ${props => props.theme.leftMenu.text};
user-select: none;
&:hover {
- background-color: ${props => props.theme.layers.hoverBg};
+ background-color: ${({ theme }) => theme.main.bg};
}
`;
diff --git a/src/components/molecules/EarthEditor/DatasetPane/index.tsx b/src/components/molecules/EarthEditor/DatasetPane/index.tsx
index 167e47daa..3889bcbbc 100644
--- a/src/components/molecules/EarthEditor/DatasetPane/index.tsx
+++ b/src/components/molecules/EarthEditor/DatasetPane/index.tsx
@@ -19,7 +19,6 @@ export type DatasetSchema = {
name: string;
source: DataSource;
totalCount?: number;
- onDrop?: (layerId: string, index?: number) => void;
};
export type Props = {
@@ -35,6 +34,8 @@ export type Props = {
) => void | Promise;
onRemoveDataset?: (schemaId: string) => void | Promise;
loading?: boolean;
+ selectedDatasetSchemaId?: string;
+ selectDatasetSchema?: (datasetSchemaId: string) => void;
};
const DatasetPane: React.FC = ({
@@ -45,6 +46,8 @@ const DatasetPane: React.FC = ({
onGoogleSheetDatasetImport,
onRemoveDataset,
loading,
+ selectDatasetSchema,
+ selectedDatasetSchemaId,
}) => {
const intl = useIntl();
const {
@@ -114,7 +117,8 @@ const DatasetPane: React.FC = ({
id={ds.id}
name={ds.name}
totalCount={ds.totalCount}
- onDrop={ds.onDrop}
+ selected={selectedDatasetSchemaId === ds.id}
+ selectDatasetSchema={selectDatasetSchema}
onRemove={onRemoveDataset}
/>
))}
diff --git a/src/components/molecules/EarthEditor/OutlinePane/hooks.tsx b/src/components/molecules/EarthEditor/OutlinePane/hooks.tsx
index 843cf7f01..2030632d4 100644
--- a/src/components/molecules/EarthEditor/OutlinePane/hooks.tsx
+++ b/src/components/molecules/EarthEditor/OutlinePane/hooks.tsx
@@ -49,7 +49,9 @@ export type ItemEx =
| {
type: "widget";
id?: string;
- };
+ }
+ | { type: "dataset"; datasetSchemaId: string };
+
export type TreeViewItem = LayerTreeViewItemItem;
export default ({
diff --git a/src/components/molecules/EarthEditor/OutlinePane/index.tsx b/src/components/molecules/EarthEditor/OutlinePane/index.tsx
index 602e9b994..fe4e1d9bd 100644
--- a/src/components/molecules/EarthEditor/OutlinePane/index.tsx
+++ b/src/components/molecules/EarthEditor/OutlinePane/index.tsx
@@ -23,7 +23,7 @@ export type Props = {
widgets?: Widget[];
widgetTypes?: WidgetType[];
sceneDescription?: string;
- selectedType?: "scene" | "layer" | "widgets" | "widget";
+ selectedType?: "scene" | "layer" | "widgets" | "widget" | "dataset";
loading?: boolean;
onLayerRename?: (id: string, name: string) => void;
onLayerVisibilityChange?: (id: string, visibility: boolean) => void;
@@ -42,6 +42,7 @@ export type Props = {
destChildrenCount: number,
parentId: string,
) => void;
+ onDatasetSchemaSelect?: (datasetSchemaId: string) => void;
onLayerGroupCreate?: () => void;
onLayerImport?: (file: File, format: Format) => void;
onDrop?: (layer: string, index: number, childrenCount: number) => any;
diff --git a/src/components/molecules/EarthEditor/PropertyPane/PropertyGroup/index.stories.tsx b/src/components/molecules/EarthEditor/PropertyPane/PropertyGroup/index.stories.tsx
deleted file mode 100644
index 88c46fbd0..000000000
--- a/src/components/molecules/EarthEditor/PropertyPane/PropertyGroup/index.stories.tsx
+++ /dev/null
@@ -1,11 +0,0 @@
-import { Meta } from "@storybook/react";
-import React from "react";
-
-import PropertyGroup from ".";
-
-export default {
- title: "molecules/EarthEditor/PropertyPane/PropertyGroup",
- component: PropertyGroup,
-} as Meta;
-
-export const Default = () => ;
diff --git a/src/components/molecules/EarthEditor/PropertyPane/PropertyGroup/index.tsx b/src/components/molecules/EarthEditor/PropertyPane/PropertyGroup/index.tsx
deleted file mode 100644
index d4995bd1c..000000000
--- a/src/components/molecules/EarthEditor/PropertyPane/PropertyGroup/index.tsx
+++ /dev/null
@@ -1,53 +0,0 @@
-import React from "react";
-
-import Text from "@reearth/components/atoms/Text";
-import { styled, useTheme } from "@reearth/theme";
-
-export interface Props {
- className?: string;
- name?: string;
-}
-
-const PropertyGroup: React.FC = ({ className, name, children }) => {
- const theme = useTheme();
- return (
-
-
-
- {name}
-
-
- {children}
-
- );
-};
-
-const PropertyWrapper = styled.div`
- width: 100%;
- display: flex;
- flex-direction: column;
- align-items: flex-start;
- margin-bottom: 17px;
-`;
-
-const PropertyTitle = styled.div`
- background-color: ${props => props.theme.properties.bg};
- padding: 8px 16px;
- text-align: left;
- user-select: none;
- display: flex;
- align-items: center;
-`;
-
-const PropertyFields = styled.div<{ hidden?: boolean }>`
- width: calc(100% - 32px);
- background-color: ${props => props.theme.properties.bg};
- padding: 16px;
- display: ${({ hidden }) => (hidden ? "none" : "block")};
-`;
-
-export default PropertyGroup;
diff --git a/src/components/molecules/EarthEditor/PropertyPane/PropertyItem/index.tsx b/src/components/molecules/EarthEditor/PropertyPane/PropertyItem/index.tsx
index 5213b5f97..896b1c6c1 100644
--- a/src/components/molecules/EarthEditor/PropertyPane/PropertyItem/index.tsx
+++ b/src/components/molecules/EarthEditor/PropertyPane/PropertyItem/index.tsx
@@ -5,6 +5,7 @@ import { useIntl } from "react-intl";
import Button from "@reearth/components/atoms/Button";
import Icon from "@reearth/components/atoms/Icon";
import Modal from "@reearth/components/atoms/Modal";
+import GroupWrapper from "@reearth/components/atoms/TabCard";
import Text from "@reearth/components/atoms/Text";
import { styled, useTheme } from "@reearth/theme";
import { metricsSizes } from "@reearth/theme/metrics";
@@ -21,10 +22,9 @@ import PropertyField, {
SchemaField as SchemaFieldType,
Asset as AssetType,
} from "../PropertyField";
-import GroupWrapper from "../PropertyGroup";
import PropertyList, { Item as PropertyListItem } from "../PropertyList";
-export type Mode = "infobox" | "scene" | "layer" | "block" | "widgets" | "widget";
+export type Mode = "infobox" | "scene" | "layer" | "block" | "widgets" | "widget" | "dataset";
export type {
Dataset,
diff --git a/src/components/molecules/EarthEditor/PropertyPane/index.tsx b/src/components/molecules/EarthEditor/PropertyPane/index.tsx
index db865c7ef..5241ec621 100644
--- a/src/components/molecules/EarthEditor/PropertyPane/index.tsx
+++ b/src/components/molecules/EarthEditor/PropertyPane/index.tsx
@@ -7,7 +7,7 @@ import { styled, useTheme } from "@reearth/theme";
import { ExtendedFuncProps } from "@reearth/types";
import { useBind } from "@reearth/util/use-bind";
-import GroupWrapper from "./PropertyGroup";
+import GroupWrapper from "@reearth/components/atoms/TabCard";
import PropertyItem, {
Props as PropertyItemProps,
Item as ItemItem,
diff --git a/src/components/molecules/Visualizer/hooks.ts b/src/components/molecules/Visualizer/hooks.ts
index 5b10b65db..08848d3d9 100644
--- a/src/components/molecules/Visualizer/hooks.ts
+++ b/src/components/molecules/Visualizer/hooks.ts
@@ -53,7 +53,7 @@ export default ({
const { ref: dropRef, isDroppable } = useDrop(
useMemo(
(): DropOptions => ({
- accept: ["primitive", "datasetSchema"],
+ accept: ["primitive"],
drop(_item, context) {
if (!rootLayerId || !isEditable) return;
const loc = context.position
diff --git a/src/components/organisms/EarthEditor/DataSourcePane/hooks.ts b/src/components/organisms/EarthEditor/DataSourcePane/hooks.ts
index 64967d3ea..a7649d946 100644
--- a/src/components/organisms/EarthEditor/DataSourcePane/hooks.ts
+++ b/src/components/organisms/EarthEditor/DataSourcePane/hooks.ts
@@ -5,22 +5,18 @@ import { useIntl } from "react-intl";
import { DatasetSchema, DataSource } from "@reearth/components/molecules/EarthEditor/DatasetPane";
import {
useGetAllDataSetsQuery,
- useAddLayerGroupFromDatasetSchemaMutation,
useSyncDatasetMutation,
useImportDatasetMutation,
useImportGoogleSheetDatasetMutation,
useRemoveDatasetMutation,
} from "@reearth/gql";
-import { useSceneId, useNotification } from "@reearth/state";
-
-const pluginId = "reearth";
-const extensionId = "marker";
+import { useSceneId, useNotification, useSelected } from "@reearth/state";
export default () => {
const intl = useIntl();
const [, setNotification] = useNotification();
+ const [selected, select] = useSelected();
const [sceneId] = useSceneId();
- const [addLayerGroupFromDatasetSchemaMutation] = useAddLayerGroupFromDatasetSchemaMutation();
const { data, loading } = useGetAllDataSetsQuery({
variables: { sceneId: sceneId || "" },
@@ -51,25 +47,19 @@ export default () => {
name: n.name,
source: n.source as DataSource,
totalCount: n.datasets.totalCount,
- onDrop: async (layerId: string, index?: number) => {
- await addLayerGroupFromDatasetSchemaMutation({
- variables: {
- parentLayerId: layerId,
- datasetSchemaId: n.id,
- pluginId,
- extensionId,
- index,
- lang: intl.locale,
- },
- refetchQueries: ["GetLayers"],
- });
- },
}
: undefined,
)
.filter((e): e is DatasetSchema => !!e)
: [],
- [addLayerGroupFromDatasetSchemaMutation, data, intl.locale],
+ [data],
+ );
+
+ const selectDatasetSchema = useCallback(
+ (datasetSchemaId: string) => {
+ select({ type: "dataset", datasetSchemaId: datasetSchemaId });
+ },
+ [select],
);
// dataset sync
@@ -176,6 +166,9 @@ export default () => {
],
);
+ const selectedDatasetSchemaId =
+ selected?.type === "dataset" ? selected.datasetSchemaId : undefined;
+
return {
datasetSchemas,
handleDatasetSync,
@@ -183,5 +176,7 @@ export default () => {
handleGoogleSheetDatasetImport,
handleRemoveDataset,
loading,
+ selectDatasetSchema,
+ selectedDatasetSchemaId: selectedDatasetSchemaId,
};
};
diff --git a/src/components/organisms/EarthEditor/DataSourcePane/index.tsx b/src/components/organisms/EarthEditor/DataSourcePane/index.tsx
index b394cbddf..375eb9de8 100644
--- a/src/components/organisms/EarthEditor/DataSourcePane/index.tsx
+++ b/src/components/organisms/EarthEditor/DataSourcePane/index.tsx
@@ -18,6 +18,8 @@ const DataSourcePane: React.FC = ({ className }) => {
handleGoogleSheetDatasetImport,
handleRemoveDataset,
loading,
+ selectDatasetSchema,
+ selectedDatasetSchemaId,
} = useHooks();
return (
@@ -29,6 +31,8 @@ const DataSourcePane: React.FC = ({ className }) => {
onDatasetImport={handleDatasetImport}
onRemoveDataset={handleRemoveDataset}
loading={loading}
+ selectDatasetSchema={selectDatasetSchema}
+ selectedDatasetSchemaId={selectedDatasetSchemaId}
/>
);
};
diff --git a/src/components/organisms/EarthEditor/DataSourcePane/queries.ts b/src/components/organisms/EarthEditor/DataSourcePane/queries.ts
index 06bf66d42..12a27c3ad 100644
--- a/src/components/organisms/EarthEditor/DataSourcePane/queries.ts
+++ b/src/components/organisms/EarthEditor/DataSourcePane/queries.ts
@@ -1,8 +1,6 @@
/* eslint-disable graphql/template-strings */
import { gql } from "@apollo/client";
-import { layerFragment } from "@reearth/gql/fragments";
-
export const GET_ALL_DATASETS = gql`
query GetAllDataSets($sceneId: ID!) {
datasetSchemas(sceneId: $sceneId, first: 100) {
@@ -80,35 +78,3 @@ export const REMOVE_DATASET = gql`
}
}
`;
-
-export const ADD_LAYER_GROUP_FROM_DATASET_SCHEMA = gql`
- mutation addLayerGroupFromDatasetSchema(
- $parentLayerId: ID!
- $pluginId: PluginID
- $extensionId: PluginExtensionID
- $datasetSchemaId: ID
- $index: Int
- $lang: String
- ) {
- addLayerGroup(
- input: {
- parentLayerId: $parentLayerId
- pluginId: $pluginId
- extensionId: $extensionId
- linkedDatasetSchemaID: $datasetSchemaId
- index: $index
- }
- ) {
- layer {
- id
- ...Layer1Fragment
- }
- parentLayer {
- id
- ...Layer0Fragment
- }
- }
- }
-
- ${layerFragment}
-`;
diff --git a/src/components/organisms/EarthEditor/DatasetInfoPane/convert.ts b/src/components/organisms/EarthEditor/DatasetInfoPane/convert.ts
new file mode 100644
index 000000000..d1de99dd3
--- /dev/null
+++ b/src/components/organisms/EarthEditor/DatasetInfoPane/convert.ts
@@ -0,0 +1,57 @@
+import { PrimitiveItem } from "@reearth/components/molecules/EarthEditor/DatasetInfoPane";
+import {
+ DatasetFragmentFragment,
+ Maybe,
+ PluginExtensionType,
+ PluginFragmentFragment,
+} from "@reearth/gql";
+
+const excludePrimitiveType = ["polyline", "polygon", "rect"];
+
+export const processDatasets = (
+ rawDatasets: Maybe[] | undefined,
+): { [key: string]: string }[] => {
+ return rawDatasets
+ ? rawDatasets
+ .filter((r): r is DatasetFragmentFragment => !!r)
+ .map(r => processDataset(r.fields))
+ : [];
+};
+
+const processDataset = (fields: DatasetFragmentFragment["fields"]): { [key: string]: string } => {
+ const datasetFields = fields
+ .map((f): [string, string] | undefined => {
+ if (!f || !f.field) return undefined;
+ return [
+ f.field.name,
+ String(typeof f.value === "object" && "lat" in f.value ? Object.values(f.value) : f.value),
+ ];
+ })
+ .filter((f): f is [string, string] => !!f);
+ return Object.fromEntries(datasetFields);
+};
+
+export const processDatasetHeaders = (
+ rawDatasets: Maybe[] | undefined,
+): string[] => {
+ const headers =
+ rawDatasets?.flatMap(
+ d => d?.fields.map(f => f.field?.name).filter((f): f is string => !!f) || [],
+ ) || [];
+ return Array.from(new Set(headers));
+};
+
+export const processPrimitives = (
+ rawPlugins: Maybe[],
+): PrimitiveItem[] => {
+ const primitiveItems =
+ rawPlugins
+ .flatMap(p =>
+ p?.extensions
+ .filter(e => e.type === PluginExtensionType.Primitive)
+ .filter(e => !excludePrimitiveType.includes(e.extensionId))
+ .map(e => ({ name: e.name, extensionId: e.extensionId, icon: e.icon, pluginId: p.id })),
+ )
+ .filter((e): e is PrimitiveItem => !!e) || [];
+ return primitiveItems;
+};
diff --git a/src/components/organisms/EarthEditor/DatasetInfoPane/hooks.ts b/src/components/organisms/EarthEditor/DatasetInfoPane/hooks.ts
new file mode 100644
index 000000000..b2c2efc9d
--- /dev/null
+++ b/src/components/organisms/EarthEditor/DatasetInfoPane/hooks.ts
@@ -0,0 +1,93 @@
+import { useCallback, useMemo } from "react";
+import { useIntl } from "react-intl";
+
+import {
+ useAddLayerGroupFromDatasetSchemaMutation,
+ useGetDatasetsForDatasetInfoPaneQuery,
+ useGetScenePluginsForDatasetInfoPaneQuery,
+} from "@reearth/gql";
+import { useNotification, useProject, useRootLayerId, useSelected } from "@reearth/state";
+
+import { processDatasets, processDatasetHeaders, processPrimitives } from "./convert";
+
+export default () => {
+ const [selected] = useSelected();
+ const [project] = useProject();
+ const [addLayerGroupFromDatasetSchemaMutation] = useAddLayerGroupFromDatasetSchemaMutation();
+ const selectedDatasetSchemaId = selected?.type === "dataset" ? selected.datasetSchemaId : "";
+ const [rootLayerId, _] = useRootLayerId();
+ const [, setNotification] = useNotification();
+ const intl = useIntl();
+ const { data: rawDatasets, loading: datasetsLoading } = useGetDatasetsForDatasetInfoPaneQuery({
+ variables: {
+ datasetSchemaId: selected?.type === "dataset" ? selected.datasetSchemaId : "",
+ first: 10,
+ },
+ skip: selected?.type !== "dataset",
+ });
+
+ const { data: rawScene, loading: scenePluginLoading } = useGetScenePluginsForDatasetInfoPaneQuery(
+ {
+ variables: {
+ projectId: project?.id ? project.id : "",
+ },
+ skip: !project?.id,
+ },
+ );
+
+ const datasets = useMemo(() => {
+ return rawDatasets?.datasets?.nodes ? processDatasets(rawDatasets?.datasets?.nodes) : [];
+ }, [rawDatasets?.datasets.nodes]);
+
+ const datasetHeaders = useMemo(() => {
+ return rawDatasets?.datasets.nodes ? processDatasetHeaders(rawDatasets.datasets.nodes) : [];
+ }, [rawDatasets?.datasets.nodes]);
+
+ const primitiveItems = useMemo(() => {
+ const plugins = rawScene?.scene?.plugins.map(p => p.plugin);
+ return plugins ? processPrimitives(plugins) : [];
+ }, [rawScene?.scene?.plugins]);
+
+ const messageCreateLayerGroupSuccess = intl.formatMessage({
+ defaultMessage: "Successfully created layer group",
+ });
+ const messageCreateLayerGroupError = intl.formatMessage({
+ defaultMessage: "Failed to create layer group",
+ });
+
+ const handleAddLayerGroupFromDatasetSchema = useCallback(
+ async (pluginId: string, extensionId: string) => {
+ if (!rootLayerId || !selectedDatasetSchemaId) return;
+ const result = await addLayerGroupFromDatasetSchemaMutation({
+ variables: {
+ parentLayerId: rootLayerId,
+ datasetSchemaId: selectedDatasetSchemaId,
+ pluginId,
+ extensionId,
+ },
+ refetchQueries: ["GetLayers"],
+ });
+ setNotification(
+ result.errors
+ ? { type: "error", text: messageCreateLayerGroupError }
+ : { type: "success", text: messageCreateLayerGroupSuccess },
+ );
+ },
+ [
+ addLayerGroupFromDatasetSchemaMutation,
+ messageCreateLayerGroupError,
+ messageCreateLayerGroupSuccess,
+ rootLayerId,
+ selectedDatasetSchemaId,
+ setNotification,
+ ],
+ );
+
+ return {
+ datasets,
+ datasetHeaders,
+ loading: datasetsLoading || scenePluginLoading,
+ primitiveItems,
+ handleAddLayerGroupFromDatasetSchema,
+ };
+};
diff --git a/src/components/organisms/EarthEditor/DatasetInfoPane/index.tsx b/src/components/organisms/EarthEditor/DatasetInfoPane/index.tsx
new file mode 100644
index 000000000..66772d2f7
--- /dev/null
+++ b/src/components/organisms/EarthEditor/DatasetInfoPane/index.tsx
@@ -0,0 +1,33 @@
+import React from "react";
+
+import Loading from "@reearth/components/atoms/Loading";
+import { default as Wrapper } from "@reearth/components/molecules/EarthEditor/DatasetInfoPane";
+
+import useHooks from "./hooks";
+
+export type Props = {
+ className?: string;
+};
+
+const DatasetInfoPane: React.FC = () => {
+ const {
+ datasetHeaders,
+ datasets,
+ primitiveItems,
+ loading,
+ handleAddLayerGroupFromDatasetSchema,
+ } = useHooks();
+ return (
+ <>
+
+ {loading && }
+ >
+ );
+};
+
+export default DatasetInfoPane;
diff --git a/src/components/organisms/EarthEditor/DatasetInfoPane/queries.ts b/src/components/organisms/EarthEditor/DatasetInfoPane/queries.ts
new file mode 100644
index 000000000..8d4f9314c
--- /dev/null
+++ b/src/components/organisms/EarthEditor/DatasetInfoPane/queries.ts
@@ -0,0 +1,78 @@
+/* eslint-disable graphql/template-strings */
+import { gql } from "@apollo/client";
+
+import { layerFragment } from "@reearth/gql/fragments";
+
+export const GET_DATASETS = gql`
+ query GetDatasetsForDatasetInfoPane(
+ $datasetSchemaId: ID!
+ $first: Int
+ $last: Int
+ $after: Cursor
+ $before: Cursor
+ ) {
+ datasets(
+ datasetSchemaId: $datasetSchemaId
+ first: $first
+ last: $last
+ after: $after
+ before: $before
+ ) {
+ nodes {
+ id
+ ...DatasetFragment
+ }
+ pageInfo {
+ startCursor
+ endCursor
+ hasNextPage
+ hasPreviousPage
+ }
+ totalCount
+ }
+ }
+`;
+
+export const GET_INSTALLED_PLUGINS = gql`
+ query GetScenePluginsForDatasetInfoPane($projectId: ID!) {
+ scene(projectId: $projectId) {
+ id
+ plugins {
+ pluginId
+ plugin {
+ id
+ ...PluginFragment
+ }
+ }
+ }
+ }
+`;
+
+export const ADD_LAYER_GROUP_FROM_DATASET_SCHEMA = gql`
+ mutation addLayerGroupFromDatasetSchema(
+ $parentLayerId: ID!
+ $pluginId: PluginID
+ $extensionId: PluginExtensionID
+ $datasetSchemaId: ID
+ $lang: String
+ ) {
+ addLayerGroup(
+ input: {
+ parentLayerId: $parentLayerId
+ pluginId: $pluginId
+ extensionId: $extensionId
+ linkedDatasetSchemaID: $datasetSchemaId
+ }
+ ) {
+ layer {
+ id
+ ...Layer1Fragment
+ }
+ parentLayer {
+ id
+ ...Layer0Fragment
+ }
+ }
+ }
+ ${layerFragment}
+`;
diff --git a/src/components/organisms/EarthEditor/ExportPane/index.tsx b/src/components/organisms/EarthEditor/ExportPane/index.tsx
index 9f44f5a35..9b7f21bf2 100644
--- a/src/components/organisms/EarthEditor/ExportPane/index.tsx
+++ b/src/components/organisms/EarthEditor/ExportPane/index.tsx
@@ -8,7 +8,6 @@ type Props = {};
const ExportPane: React.FC = () => {
const { onExport } = useHooks();
-
return ;
};
diff --git a/src/components/organisms/EarthEditor/RightMenu/hooks.ts b/src/components/organisms/EarthEditor/RightMenu/hooks.ts
index a25df3846..293e1dd9d 100644
--- a/src/components/organisms/EarthEditor/RightMenu/hooks.ts
+++ b/src/components/organisms/EarthEditor/RightMenu/hooks.ts
@@ -2,7 +2,7 @@ import { useCallback, useEffect, useState } from "react";
import { useSelected, useSelectedBlock, useIsCapturing } from "@reearth/state";
-export type Tab = "layer" | "scene" | "widget" | "widgets" | "infobox" | "export";
+export type Tab = "layer" | "scene" | "widget" | "widgets" | "infobox" | "export" | "dataset";
export default () => {
const [selected] = useSelected();
diff --git a/src/components/organisms/EarthEditor/RightMenu/index.tsx b/src/components/organisms/EarthEditor/RightMenu/index.tsx
index 0581840cc..48d71d9aa 100644
--- a/src/components/organisms/EarthEditor/RightMenu/index.tsx
+++ b/src/components/organisms/EarthEditor/RightMenu/index.tsx
@@ -2,11 +2,12 @@ import React, { useMemo } from "react";
import { useIntl } from "react-intl";
import TabArea from "@reearth/components/atoms/TabArea";
+import DatasetInfoPane from "@reearth/components/organisms/EarthEditor/DatasetInfoPane";
import ExportPane from "@reearth/components/organisms/EarthEditor/ExportPane";
import PropertyPane from "../PropertyPane";
-import useHooks from "./hooks";
+import useHooks, { Tab } from "./hooks";
const layerMode = ["property", "infobox", "export"];
const widgetMode = ["property"];
@@ -35,7 +36,7 @@ const RightMenu: React.FC = () => {
);
return (
-
+
menuAlignment="top"
selected={
selectedBlock || selectedTab === "infobox"
@@ -78,6 +79,7 @@ const RightMenu: React.FC = () => {
>
),
+ dataset: selected === "dataset" && ,
}}
);
diff --git a/src/gql/fragments/dataset.ts b/src/gql/fragments/dataset.ts
new file mode 100644
index 000000000..e459ca829
--- /dev/null
+++ b/src/gql/fragments/dataset.ts
@@ -0,0 +1,21 @@
+import { gql } from "@apollo/client";
+
+const datasetFragment = gql`
+ fragment DatasetFragment on Dataset {
+ id
+ source
+ schemaId
+ fields {
+ fieldId
+ type
+ value
+ field {
+ id
+ name
+ }
+ }
+ name
+ }
+`;
+
+export default datasetFragment;
diff --git a/src/gql/fragments/index.ts b/src/gql/fragments/index.ts
index e269d0459..b1f1af92d 100644
--- a/src/gql/fragments/index.ts
+++ b/src/gql/fragments/index.ts
@@ -1,4 +1,6 @@
export { default as infoboxFragment } from "./infobox";
export { default as layerFragment } from "./layer";
export { default as propertyFragment } from "./property";
+export { default as datasetFragment } from "./dataset";
export { default as widgetAlignSysFragment } from "./alignsystem";
+export { default as pluginFragment } from "./plugin";
diff --git a/src/gql/fragments/plugin.ts b/src/gql/fragments/plugin.ts
new file mode 100644
index 000000000..e6c295024
--- /dev/null
+++ b/src/gql/fragments/plugin.ts
@@ -0,0 +1,18 @@
+import { gql } from "@apollo/client";
+
+const pluginFragment = gql`
+ fragment PluginFragment on Plugin {
+ id
+ name
+ extensions {
+ extensionId
+ type
+ name
+ description
+ icon
+ translatedName
+ }
+ }
+`;
+
+export default pluginFragment;
diff --git a/src/gql/graphql-client-api.tsx b/src/gql/graphql-client-api.tsx
index 925b4bec0..544b019aa 100644
--- a/src/gql/graphql-client-api.tsx
+++ b/src/gql/graphql-client-api.tsx
@@ -2287,12 +2287,29 @@ export type RemoveDatasetMutationVariables = Exact<{
export type RemoveDatasetMutation = { __typename?: 'Mutation', removeDatasetSchema?: { __typename?: 'RemoveDatasetSchemaPayload', schemaId: string } | null | undefined };
+export type GetDatasetsForDatasetInfoPaneQueryVariables = Exact<{
+ datasetSchemaId: Scalars['ID'];
+ first?: Maybe;
+ last?: Maybe;
+ after?: Maybe;
+ before?: Maybe;
+}>;
+
+
+export type GetDatasetsForDatasetInfoPaneQuery = { __typename?: 'Query', datasets: { __typename?: 'DatasetConnection', totalCount: number, nodes: Array<{ __typename?: 'Dataset', id: string, source: string, schemaId: string, name?: string | null | undefined, fields: Array<{ __typename?: 'DatasetField', fieldId: string, type: ValueType, value?: any | null | undefined, field?: { __typename?: 'DatasetSchemaField', id: string, name: string } | null | undefined }> } | null | undefined>, pageInfo: { __typename?: 'PageInfo', startCursor?: string | null | undefined, endCursor?: string | null | undefined, hasNextPage: boolean, hasPreviousPage: boolean } } };
+
+export type GetScenePluginsForDatasetInfoPaneQueryVariables = Exact<{
+ projectId: Scalars['ID'];
+}>;
+
+
+export type GetScenePluginsForDatasetInfoPaneQuery = { __typename?: 'Query', scene?: { __typename?: 'Scene', id: string, plugins: Array<{ __typename?: 'ScenePlugin', pluginId: string, plugin?: { __typename?: 'Plugin', id: string, name: string, extensions: Array<{ __typename?: 'PluginExtension', extensionId: string, type: PluginExtensionType, name: string, description: string, icon: string, translatedName: string }> } | null | undefined }> } | null | undefined };
+
export type AddLayerGroupFromDatasetSchemaMutationVariables = Exact<{
parentLayerId: Scalars['ID'];
pluginId?: Maybe;
extensionId?: Maybe;
datasetSchemaId?: Maybe;
- index?: Maybe;
lang?: Maybe;
}>;
@@ -2835,6 +2852,8 @@ export type WidgetSectionFragmentFragment = { __typename?: 'WidgetSection', top?
export type WidgetAreaFragmentFragment = { __typename?: 'WidgetArea', widgetIds: Array, align: WidgetAreaAlign };
+export type DatasetFragmentFragment = { __typename?: 'Dataset', id: string, source: string, schemaId: string, name?: string | null | undefined, fields: Array<{ __typename?: 'DatasetField', fieldId: string, type: ValueType, value?: any | null | undefined, field?: { __typename?: 'DatasetSchemaField', id: string, name: string } | null | undefined }> };
+
export type InfoboxFragmentFragment = { __typename?: 'Infobox', propertyId: string, property?: { __typename?: 'Property', id: string, schema?: { __typename?: 'PropertySchema', id: string, groups: Array<{ __typename?: 'PropertySchemaGroup', schemaGroupId: string, title?: string | null | undefined, translatedTitle: string, isList: boolean, representativeFieldId?: string | null | undefined, isAvailableIf?: { __typename?: 'PropertyCondition', fieldId: string, type: ValueType, value?: any | null | undefined } | null | undefined, fields: Array<{ __typename?: 'PropertySchemaField', fieldId: string, title: string, description: string, translatedTitle: string, translatedDescription: string, prefix?: string | null | undefined, suffix?: string | null | undefined, type: ValueType, defaultValue?: any | null | undefined, ui?: PropertySchemaFieldUi | null | undefined, min?: number | null | undefined, max?: number | null | undefined, choices?: Array<{ __typename?: 'PropertySchemaFieldChoice', key: string, icon?: string | null | undefined, title: string, translatedTitle: string }> | null | undefined, isAvailableIf?: { __typename?: 'PropertyCondition', fieldId: string, type: ValueType, value?: any | null | undefined } | null | undefined }> }> } | null | undefined, items: Array<{ __typename?: 'PropertyGroup', id: string, schemaGroupId: string, fields: Array<{ __typename?: 'PropertyField', id: string, fieldId: string, type: ValueType, value?: any | null | undefined, links?: Array<{ __typename?: 'PropertyFieldLink', datasetId?: string | null | undefined, datasetSchemaId: string, datasetSchemaFieldId: string, datasetSchema?: { __typename?: 'DatasetSchema', id: string, name: string } | null | undefined, dataset?: { __typename?: 'Dataset', id: string, name?: string | null | undefined } | null | undefined, datasetSchemaField?: { __typename?: 'DatasetSchemaField', id: string, name: string } | null | undefined }> | null | undefined }> } | { __typename?: 'PropertyGroupList', id: string, schemaGroupId: string, groups: Array<{ __typename?: 'PropertyGroup', id: string, schemaGroupId: string, fields: Array<{ __typename?: 'PropertyField', id: string, fieldId: string, type: ValueType, value?: any | null | undefined, links?: Array<{ __typename?: 'PropertyFieldLink', datasetId?: string | null | undefined, datasetSchemaId: string, datasetSchemaFieldId: string, datasetSchema?: { __typename?: 'DatasetSchema', id: string, name: string } | null | undefined, dataset?: { __typename?: 'Dataset', id: string, name?: string | null | undefined } | null | undefined, datasetSchemaField?: { __typename?: 'DatasetSchemaField', id: string, name: string } | null | undefined }> | null | undefined }> }> }> } | null | undefined, fields: Array<{ __typename?: 'InfoboxField', id: string, pluginId: string, extensionId: string, propertyId: string, property?: { __typename?: 'Property', id: string, schema?: { __typename?: 'PropertySchema', id: string, groups: Array<{ __typename?: 'PropertySchemaGroup', schemaGroupId: string, title?: string | null | undefined, translatedTitle: string, isList: boolean, representativeFieldId?: string | null | undefined, isAvailableIf?: { __typename?: 'PropertyCondition', fieldId: string, type: ValueType, value?: any | null | undefined } | null | undefined, fields: Array<{ __typename?: 'PropertySchemaField', fieldId: string, title: string, description: string, translatedTitle: string, translatedDescription: string, prefix?: string | null | undefined, suffix?: string | null | undefined, type: ValueType, defaultValue?: any | null | undefined, ui?: PropertySchemaFieldUi | null | undefined, min?: number | null | undefined, max?: number | null | undefined, choices?: Array<{ __typename?: 'PropertySchemaFieldChoice', key: string, icon?: string | null | undefined, title: string, translatedTitle: string }> | null | undefined, isAvailableIf?: { __typename?: 'PropertyCondition', fieldId: string, type: ValueType, value?: any | null | undefined } | null | undefined }> }> } | null | undefined, items: Array<{ __typename?: 'PropertyGroup', id: string, schemaGroupId: string, fields: Array<{ __typename?: 'PropertyField', id: string, fieldId: string, type: ValueType, value?: any | null | undefined, links?: Array<{ __typename?: 'PropertyFieldLink', datasetId?: string | null | undefined, datasetSchemaId: string, datasetSchemaFieldId: string, datasetSchema?: { __typename?: 'DatasetSchema', id: string, name: string } | null | undefined, dataset?: { __typename?: 'Dataset', id: string, name?: string | null | undefined } | null | undefined, datasetSchemaField?: { __typename?: 'DatasetSchemaField', id: string, name: string } | null | undefined }> | null | undefined }> } | { __typename?: 'PropertyGroupList', id: string, schemaGroupId: string, groups: Array<{ __typename?: 'PropertyGroup', id: string, schemaGroupId: string, fields: Array<{ __typename?: 'PropertyField', id: string, fieldId: string, type: ValueType, value?: any | null | undefined, links?: Array<{ __typename?: 'PropertyFieldLink', datasetId?: string | null | undefined, datasetSchemaId: string, datasetSchemaFieldId: string, datasetSchema?: { __typename?: 'DatasetSchema', id: string, name: string } | null | undefined, dataset?: { __typename?: 'Dataset', id: string, name?: string | null | undefined } | null | undefined, datasetSchemaField?: { __typename?: 'DatasetSchemaField', id: string, name: string } | null | undefined }> | null | undefined }> }> }> } | null | undefined }> };
export type MergedInfoboxFragmentFragment = { __typename?: 'MergedInfobox', property?: { __typename?: 'MergedProperty', originalId?: string | null | undefined, parentId?: string | null | undefined, linkedDatasetId?: string | null | undefined, schema?: { __typename?: 'PropertySchema', id: string } | null | undefined, groups: Array<{ __typename?: 'MergedPropertyGroup', schemaGroupId: string, groups: Array<{ __typename?: 'MergedPropertyGroup', schemaGroupId: string, fields: Array<{ __typename?: 'MergedPropertyField', fieldId: string, type: ValueType, actualValue?: any | null | undefined, overridden: boolean, links?: Array<{ __typename?: 'PropertyFieldLink', datasetId?: string | null | undefined, datasetSchemaId: string, datasetSchemaFieldId: string, datasetSchema?: { __typename?: 'DatasetSchema', id: string, name: string } | null | undefined, dataset?: { __typename?: 'Dataset', id: string, name?: string | null | undefined } | null | undefined, datasetSchemaField?: { __typename?: 'DatasetSchemaField', id: string, name: string } | null | undefined }> | null | undefined }> }>, fields: Array<{ __typename?: 'MergedPropertyField', fieldId: string, type: ValueType, actualValue?: any | null | undefined, overridden: boolean, links?: Array<{ __typename?: 'PropertyFieldLink', datasetId?: string | null | undefined, datasetSchemaId: string, datasetSchemaFieldId: string, datasetSchema?: { __typename?: 'DatasetSchema', id: string, name: string } | null | undefined, dataset?: { __typename?: 'Dataset', id: string, name?: string | null | undefined } | null | undefined, datasetSchemaField?: { __typename?: 'DatasetSchemaField', id: string, name: string } | null | undefined }> | null | undefined }> }> } | null | undefined, fields: Array<{ __typename?: 'MergedInfoboxField', originalId: string, pluginId: string, extensionId: string, property?: { __typename?: 'MergedProperty', originalId?: string | null | undefined, parentId?: string | null | undefined, linkedDatasetId?: string | null | undefined, schema?: { __typename?: 'PropertySchema', id: string } | null | undefined, groups: Array<{ __typename?: 'MergedPropertyGroup', schemaGroupId: string, groups: Array<{ __typename?: 'MergedPropertyGroup', schemaGroupId: string, fields: Array<{ __typename?: 'MergedPropertyField', fieldId: string, type: ValueType, actualValue?: any | null | undefined, overridden: boolean, links?: Array<{ __typename?: 'PropertyFieldLink', datasetId?: string | null | undefined, datasetSchemaId: string, datasetSchemaFieldId: string, datasetSchema?: { __typename?: 'DatasetSchema', id: string, name: string } | null | undefined, dataset?: { __typename?: 'Dataset', id: string, name?: string | null | undefined } | null | undefined, datasetSchemaField?: { __typename?: 'DatasetSchemaField', id: string, name: string } | null | undefined }> | null | undefined }> }>, fields: Array<{ __typename?: 'MergedPropertyField', fieldId: string, type: ValueType, actualValue?: any | null | undefined, overridden: boolean, links?: Array<{ __typename?: 'PropertyFieldLink', datasetId?: string | null | undefined, datasetSchemaId: string, datasetSchemaFieldId: string, datasetSchema?: { __typename?: 'DatasetSchema', id: string, name: string } | null | undefined, dataset?: { __typename?: 'Dataset', id: string, name?: string | null | undefined } | null | undefined, datasetSchemaField?: { __typename?: 'DatasetSchemaField', id: string, name: string } | null | undefined }> | null | undefined }> }> } | null | undefined }> };
@@ -2881,6 +2900,8 @@ type Layer5Fragment_LayerItem_Fragment = { __typename?: 'LayerItem', id: string,
export type Layer5FragmentFragment = Layer5Fragment_LayerGroup_Fragment | Layer5Fragment_LayerItem_Fragment;
+export type PluginFragmentFragment = { __typename?: 'Plugin', id: string, name: string, extensions: Array<{ __typename?: 'PluginExtension', extensionId: string, type: PluginExtensionType, name: string, description: string, icon: string, translatedName: string }> };
+
export type PropertySchemaGroupFragmentFragment = { __typename?: 'PropertySchemaGroup', schemaGroupId: string, title?: string | null | undefined, translatedTitle: string, isList: boolean, representativeFieldId?: string | null | undefined, isAvailableIf?: { __typename?: 'PropertyCondition', fieldId: string, type: ValueType, value?: any | null | undefined } | null | undefined, fields: Array<{ __typename?: 'PropertySchemaField', fieldId: string, title: string, description: string, translatedTitle: string, translatedDescription: string, prefix?: string | null | undefined, suffix?: string | null | undefined, type: ValueType, defaultValue?: any | null | undefined, ui?: PropertySchemaFieldUi | null | undefined, min?: number | null | undefined, max?: number | null | undefined, choices?: Array<{ __typename?: 'PropertySchemaFieldChoice', key: string, icon?: string | null | undefined, title: string, translatedTitle: string }> | null | undefined, isAvailableIf?: { __typename?: 'PropertyCondition', fieldId: string, type: ValueType, value?: any | null | undefined } | null | undefined }> };
type PropertyItemFragment_PropertyGroup_Fragment = { __typename?: 'PropertyGroup', id: string, schemaGroupId: string, fields: Array<{ __typename?: 'PropertyField', id: string, fieldId: string, type: ValueType, value?: any | null | undefined, links?: Array<{ __typename?: 'PropertyFieldLink', datasetId?: string | null | undefined, datasetSchemaId: string, datasetSchemaFieldId: string, datasetSchema?: { __typename?: 'DatasetSchema', id: string, name: string } | null | undefined, dataset?: { __typename?: 'Dataset', id: string, name?: string | null | undefined } | null | undefined, datasetSchemaField?: { __typename?: 'DatasetSchemaField', id: string, name: string } | null | undefined }> | null | undefined }> };
@@ -3357,6 +3378,23 @@ export const WidgetAlignSystemFragmentFragmentDoc = gql`
}
}
${WidgetZoneFragmentFragmentDoc}`;
+export const DatasetFragmentFragmentDoc = gql`
+ fragment DatasetFragment on Dataset {
+ id
+ source
+ schemaId
+ fields {
+ fieldId
+ type
+ value
+ field {
+ id
+ name
+ }
+ }
+ name
+}
+ `;
export const InfoboxFragmentFragmentDoc = gql`
fragment InfoboxFragment on Infobox {
propertyId
@@ -3564,6 +3602,20 @@ export const Layer5FragmentFragmentDoc = gql`
}
}
${LayerFragmentFragmentDoc}`;
+export const PluginFragmentFragmentDoc = gql`
+ fragment PluginFragment on Plugin {
+ id
+ name
+ extensions {
+ extensionId
+ type
+ name
+ description
+ icon
+ translatedName
+ }
+}
+ `;
export const TeamFragmentDoc = gql`
fragment Team on Team {
id
@@ -4293,10 +4345,107 @@ export function useRemoveDatasetMutation(baseOptions?: Apollo.MutationHookOption
export type RemoveDatasetMutationHookResult = ReturnType;
export type RemoveDatasetMutationResult = Apollo.MutationResult;
export type RemoveDatasetMutationOptions = Apollo.BaseMutationOptions;
+export const GetDatasetsForDatasetInfoPaneDocument = gql`
+ query GetDatasetsForDatasetInfoPane($datasetSchemaId: ID!, $first: Int, $last: Int, $after: Cursor, $before: Cursor) {
+ datasets(
+ datasetSchemaId: $datasetSchemaId
+ first: $first
+ last: $last
+ after: $after
+ before: $before
+ ) {
+ nodes {
+ id
+ ...DatasetFragment
+ }
+ pageInfo {
+ startCursor
+ endCursor
+ hasNextPage
+ hasPreviousPage
+ }
+ totalCount
+ }
+}
+ ${DatasetFragmentFragmentDoc}`;
+
+/**
+ * __useGetDatasetsForDatasetInfoPaneQuery__
+ *
+ * To run a query within a React component, call `useGetDatasetsForDatasetInfoPaneQuery` and pass it any options that fit your needs.
+ * When your component renders, `useGetDatasetsForDatasetInfoPaneQuery` returns an object from Apollo Client that contains loading, error, and data properties
+ * you can use to render your UI.
+ *
+ * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;
+ *
+ * @example
+ * const { data, loading, error } = useGetDatasetsForDatasetInfoPaneQuery({
+ * variables: {
+ * datasetSchemaId: // value for 'datasetSchemaId'
+ * first: // value for 'first'
+ * last: // value for 'last'
+ * after: // value for 'after'
+ * before: // value for 'before'
+ * },
+ * });
+ */
+export function useGetDatasetsForDatasetInfoPaneQuery(baseOptions: Apollo.QueryHookOptions) {
+ const options = {...defaultOptions, ...baseOptions}
+ return Apollo.useQuery(GetDatasetsForDatasetInfoPaneDocument, options);
+ }
+export function useGetDatasetsForDatasetInfoPaneLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) {
+ const options = {...defaultOptions, ...baseOptions}
+ return Apollo.useLazyQuery(GetDatasetsForDatasetInfoPaneDocument, options);
+ }
+export type GetDatasetsForDatasetInfoPaneQueryHookResult = ReturnType;
+export type GetDatasetsForDatasetInfoPaneLazyQueryHookResult = ReturnType;
+export type GetDatasetsForDatasetInfoPaneQueryResult = Apollo.QueryResult;
+export const GetScenePluginsForDatasetInfoPaneDocument = gql`
+ query GetScenePluginsForDatasetInfoPane($projectId: ID!) {
+ scene(projectId: $projectId) {
+ id
+ plugins {
+ pluginId
+ plugin {
+ id
+ ...PluginFragment
+ }
+ }
+ }
+}
+ ${PluginFragmentFragmentDoc}`;
+
+/**
+ * __useGetScenePluginsForDatasetInfoPaneQuery__
+ *
+ * To run a query within a React component, call `useGetScenePluginsForDatasetInfoPaneQuery` and pass it any options that fit your needs.
+ * When your component renders, `useGetScenePluginsForDatasetInfoPaneQuery` returns an object from Apollo Client that contains loading, error, and data properties
+ * you can use to render your UI.
+ *
+ * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;
+ *
+ * @example
+ * const { data, loading, error } = useGetScenePluginsForDatasetInfoPaneQuery({
+ * variables: {
+ * projectId: // value for 'projectId'
+ * },
+ * });
+ */
+export function useGetScenePluginsForDatasetInfoPaneQuery(baseOptions: Apollo.QueryHookOptions) {
+ const options = {...defaultOptions, ...baseOptions}
+ return Apollo.useQuery(GetScenePluginsForDatasetInfoPaneDocument, options);
+ }
+export function useGetScenePluginsForDatasetInfoPaneLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) {
+ const options = {...defaultOptions, ...baseOptions}
+ return Apollo.useLazyQuery(GetScenePluginsForDatasetInfoPaneDocument, options);
+ }
+export type GetScenePluginsForDatasetInfoPaneQueryHookResult = ReturnType;
+export type GetScenePluginsForDatasetInfoPaneLazyQueryHookResult = ReturnType;
+export type GetScenePluginsForDatasetInfoPaneQueryResult = Apollo.QueryResult;
export const AddLayerGroupFromDatasetSchemaDocument = gql`
- mutation addLayerGroupFromDatasetSchema($parentLayerId: ID!, $pluginId: PluginID, $extensionId: PluginExtensionID, $datasetSchemaId: ID, $index: Int, $lang: String) {
+ mutation addLayerGroupFromDatasetSchema($parentLayerId: ID!, $pluginId: PluginID, $extensionId: PluginExtensionID, $datasetSchemaId: ID, $lang: String) {
addLayerGroup(
- input: {parentLayerId: $parentLayerId, pluginId: $pluginId, extensionId: $extensionId, linkedDatasetSchemaID: $datasetSchemaId, index: $index}
+ input: {parentLayerId: $parentLayerId, pluginId: $pluginId, extensionId: $extensionId, linkedDatasetSchemaID: $datasetSchemaId}
) {
layer {
id
@@ -4329,7 +4478,6 @@ export type AddLayerGroupFromDatasetSchemaMutationFn = Apollo.MutationFunction(undefined);
export const useSelected = () => useAtom(selected);
diff --git a/src/util/use-dnd/types.ts b/src/util/use-dnd/types.ts
index da947cab1..c8e462d8c 100644
--- a/src/util/use-dnd/types.ts
+++ b/src/util/use-dnd/types.ts
@@ -1,10 +1,4 @@
-export type ItemType =
- | "layerItem"
- | "layerGroup"
- | "datasetSchema"
- | "primitive"
- | "block"
- | "null";
+export type ItemType = "layerItem" | "layerGroup" | "primitive" | "block" | "null";
export type Item = {
null: { type: "null" };
@@ -20,7 +14,6 @@ export type Item = {
parentLayerId: string;
index: number;
};
- datasetSchema: { type: "datasetSchema" };
primitive: { type: "primitive" };
block: {
type: "block";
diff --git a/translations/en.yml b/translations/en.yml
index 4b762bc47..718d85db8 100644
--- a/translations/en.yml
+++ b/translations/en.yml
@@ -92,6 +92,13 @@ src:
'3662865152': New project
'4173541988': Quick Start
EarthEditor:
+ DatasetInfoPane:
+ '819545886': Import to scene
+ '3351123048': Data
+ DatasetProperty:
+ PropertyItem:
+ '440359455': import
+ '1159371335': Layer style
DatasetPane:
'293739158': Add Dataset
'2446409280': No Dataset is here
@@ -458,6 +465,9 @@ src:
'373918798': Failed to delete the dataset.
'517189107': Successfully added the dataset!
'1235836640': Failed to add the dataset.
+ DatasetInfoPane:
+ '646776720': Successfully created layer group
+ '1221302534': Failed to create layer group
Header:
'329817781': >-
Successfully unpublished your project. Now nobody can access your
diff --git a/translations/ja.yml b/translations/ja.yml
index d7e1bbae0..18edddcd2 100644
--- a/translations/ja.yml
+++ b/translations/ja.yml
@@ -2,484 +2,494 @@ src:
components:
atoms:
ConfirmationModal:
- "3528672691": キャンセル
- "3640052215": 続ける
+ '3528672691': キャンセル
+ '3640052215': 続ける
DropHolder:
- "2563828564": ここにドロップ
+ '2563828564': ここにドロップ
NotFound:
- "4184561493": ページが見つかりません
+ '4184561493': ページが見つかりません
PublicationStatus:
- "739063002": 非公開
- "3640454975": 一般公開
+ '739063002': 非公開
+ '3640454975': 一般公開
Select:
- "395965578": 未設定
+ '395965578': 未設定
molecules:
Authentication:
Login:
- "326989249": アカウントをお持ちではありませんか?
- "2039506849": "Re:Earthにログイン"
- "2212670355": 登録
- "2237029987": パスワード
- "2424773344": ようこそ
- "2441159578": ユーザー名またはメールアドレス
- "3242928626": パスワードを忘れましたか?
- "3640052215": ログイン
+ '326989249': アカウントをお持ちではありませんか?
+ '2039506849': 'Re:Earthにログイン'
+ '2212670355': 登録
+ '2237029987': パスワード
+ '2424773344': ようこそ
+ '2441159578': ユーザー名またはメールアドレス
+ '3242928626': パスワードを忘れましたか?
+ '3640052215': ログイン
Common:
AssetModal:
- "164261147": 画像を選択
- "388451950": リソースを選択
- "854575786": アセット
- "1115770113": 保存
- "2229699602": リソースURL
- "2599388697": URL
- "3304605076": 映像URLを追加
- "3528672691": キャンセル
- "4035057905": 画像URL
- "4070151372": 選択
+ '164261147': 画像を選択
+ '388451950': リソースを選択
+ '854575786': アセット
+ '1115770113': 保存
+ '2229699602': リソースURL
+ '2599388697': URL
+ '3304605076': 映像URLを追加
+ '3528672691': キャンセル
+ '4035057905': 画像URL
+ '4070151372': 選択
AssetContainer:
- "1982191895": サイズ順
- "2409515782": まだアセットがアップロードされていません。アップロードボタンをクリックしてファイルをアップロードしてください。
- "2854191800": 作成日時順
- "2906553848": 名前順
- "3057159632": 画像アップロード
- "3645414921": 削除
- "3715622784": まだ画像がアップロードされていません。アップロードボタンをクリックして画像をアップロードしてください。
- "3863945965": ファイルアップロード
+ '1982191895': サイズ順
+ '2409515782': まだアセットがアップロードされていません。アップロードボタンをクリックしてファイルをアップロードしてください。
+ '2854191800': 作成日時順
+ '2906553848': 名前順
+ '3057159632': 画像アップロード
+ '3645414921': 削除
+ '3715622784': まだ画像がアップロードされていません。アップロードボタンをクリックして画像をアップロードしてください。
+ '3863945965': ファイルアップロード
AssetDeleteModal:
- "2868137144": 選択されたアセットが使用されていないことを確認してください。この操作は取り消せません。
- "3528672691": キャンセル
- "3645414921": 削除
- "3911655130": 1つまたは複数のアセットを削除しようとしています。
+ '2868137144': 選択されたアセットが使用されていないことを確認してください。この操作は取り消せません。
+ '3528672691': キャンセル
+ '3645414921': 削除
+ '3911655130': 1つまたは複数のアセットを削除しようとしています。
Header:
- "21332146": ""
- "248888005": アカウント設定
+ '21332146': ''
+ '248888005': アカウント設定
ProjectCreationModal:
- "1215917108": プロジェクト名
- "2202304674": サムネイル画像を選択
- "2794683164": 新規プロジェクト作成
- "3374163063": プロジェクト概要
- "3528672691": キャンセル
- "4120989039": 作成
+ '1215917108': プロジェクト名
+ '2202304674': サムネイル画像を選択
+ '2794683164': 新規プロジェクト作成
+ '3374163063': プロジェクト概要
+ '3528672691': キャンセル
+ '4120989039': 作成
ProjectMenu:
- "1235925265": ヘルプ
- "2661706411": データセット
- "3029638665": プロジェクト設定
- "3873048483": プロジェクト管理
+ '1235925265': ヘルプ
+ '2661706411': データセット
+ '3029638665': プロジェクト設定
+ '3873048483': プロジェクト管理
TeamMenu:
- "2611517824": ワークスペース
- "3828443189": 新規ワークスペース
- "4157106658": ワークスペースを管理
+ '2611517824': ワークスペース
+ '3828443189': 新規ワークスペース
+ '4157106658': ワークスペースを管理
WorkspaceCreationModal:
- "840520006": 新規ワークスペース作成
- "2523193532": ワークスペース名
- "3528672691": キャンセル
- "4120989039": 作成
+ '840520006': 新規ワークスペース作成
+ '2523193532': ワークスペース名
+ '3528672691': キャンセル
+ '4120989039': 作成
Dashboard:
- "499824730": ワークスペースにプロジェクトがありません。クイックスタート内の「新規プロジェクト作成」ボタンをクリックして、プロジェクトを作成してください。
- "1068381306": ユーザーガイド
- "2148917173": のワークスペース
- "3428478975": 新規ワークスペース作成
- "3662865152": 新規プロジェクト作成
- "4173541988": クイックスタート
+ '499824730': ワークスペースにプロジェクトがありません。クイックスタート内の「新規プロジェクト作成」ボタンをクリックして、プロジェクトを作成してください。
+ '1068381306': ユーザーガイド
+ '2148917173': のワークスペース
+ '3428478975': 新規ワークスペース作成
+ '3662865152': 新規プロジェクト作成
+ '4173541988': クイックスタート
EarthEditor:
+ DatasetInfoPane:
+ '819545886': シーンへ追加
+ '3351123048': データ
+ DatasetProperty:
+ PropertyItem:
+ '440359455': インポート
+ '1159371335': レイヤータイプ
DatasetPane:
- "293739158": データセットを追加
- "2446409280": データセットは存在しません
- "3786358103": その他
+ '293739158': データセットを追加
+ '2446409280': データセットは存在しません
+ '3786358103': その他
DatasetDeleteModal:
- "660592555": 確認
- "709595739": プロジェクトがデータセットに依存していないことを確認してください。
- "3057145766": データセットを削除します。このデータセットとリンクされているレイヤーはエラーが発生する可能性があります。
- "3528672691": キャンセル
+ '660592555': 確認
+ '709595739': プロジェクトがデータセットに依存していないことを確認してください。
+ '3057145766': データセットを削除します。このデータセットとリンクされているレイヤーはエラーが発生する可能性があります。
+ '3528672691': キャンセル
DatasetModal:
- "142299937": グーグルドライブ
- "293739158": データセットを追加
- "489401013": 送信
- "2280307158": そのサービスはまだ利用できません。
- "2842500457": データセットを追加
- "3162171995": アップロード
- "3528672691": キャンセル
- "3980428931": CSVファイルをアップロード
- "4064435443": "CSV, JSON, GISのファイルに対応"
+ '142299937': グーグルドライブ
+ '293739158': データセットを追加
+ '489401013': 送信
+ '2280307158': そのサービスはまだ利用できません。
+ '2842500457': データセットを追加
+ '3162171995': アップロード
+ '3528672691': キャンセル
+ '3980428931': CSVファイルをアップロード
+ '4064435443': 'CSV, JSON, GISのファイルに対応'
Gdrive:
- "734499794": グーグルドライブと連携
- "1359825936": "Re:Earthは、GoogleスプレッドシートやCSVファイルに対応しています。"
+ '734499794': グーグルドライブと連携
+ '1359825936': 'Re:Earthは、GoogleスプレッドシートやCSVファイルに対応しています。'
ExportPane:
- "3590336714": エクスポート
- "3977973714": ファイル形式
+ '3590336714': エクスポート
+ '3977973714': ファイル形式
FovSlider:
- "3017293479": 狭い
- "3291465140": 角度
- "3723856417": 広い
+ '3017293479': 狭い
+ '3291465140': 角度
+ '3723856417': 広い
Header:
- "1458938618": 更新する
- "1547167026": 公開
- "2237014112": 非公開にする
- "3637715635": プレビュー
+ '1458938618': 更新する
+ '1547167026': 公開
+ '2237014112': 非公開にする
+ '3637715635': プレビュー
LayerMultipleSelectionModal:
- "1115770113": 保存
- "2221959784": 選択可能なレイヤー
- "2703758654": 削除
- "3096288057": ストーリー
- "3099331554": 追加
- "3528672691": キャンセル
- "4258523167": レイヤーを選択
+ '1115770113': 保存
+ '2221959784': 選択可能なレイヤー
+ '2703758654': 削除
+ '3096288057': ストーリー
+ '3099331554': 追加
+ '3528672691': キャンセル
+ '4258523167': レイヤーを選択
LayerSelectionModal:
- "1115770113": 保存
- "3528672691": キャンセル
- "4258523167": レイヤー選択
+ '1115770113': 保存
+ '3528672691': キャンセル
+ '4258523167': レイヤー選択
LayerTreeViewItem:
LayerActions:
- "219790765": 新規フォルダ作成
- "649072858": 選択中のレイヤーを削除
- "3062135486": レイヤーを追加
+ '219790765': 新規フォルダ作成
+ '649072858': 選択中のレイヤーを削除
+ '3062135486': レイヤーを追加
LayerActionsList:
- "3805664340": 選択中の項目を削除
+ '3805664340': 選択中の項目を削除
OutlinePane:
- "436453487": ウィジェットを削除しようとしています。ウィジェットに関連するデータも削除されます。
- "487956354": 本当にウィジェットを削除しますか?
- "1538011248": シーン
- "1801677935": ウィジェットを削除
- "1835798571": レイヤー
- "2793623359": ウィジェット
- "3645414921": 削除
+ '436453487': ウィジェットを削除しようとしています。ウィジェットに関連するデータも削除されます。
+ '487956354': 本当にウィジェットを削除しますか?
+ '1538011248': シーン
+ '1801677935': ウィジェットを削除
+ '1835798571': レイヤー
+ '2793623359': ウィジェット
+ '3645414921': 削除
PropertyPane:
- "3453457092": インフォボックス作成
- "3833270271": データセット
+ '3453457092': インフォボックス作成
+ '3833270271': データセット
PropertyField:
CameraField:
- "129313613": 設定済み
- "323753263": 設定済み
- "1096873652": 未設定
- "1843776221": ロール
- "1956102114": 編集
- "2095247710": 経度
- "2222144661": 緯度
- "2299790601": ピッチ
- "2468683988": ヘッディング
- "2671930823": 確認
- "3067266584": 高度
- "3528672691": キャンセル
- "3553425520": ジャンプ
- "3821373974": 編集
- "4211710217": キャプチャ
+ '129313613': 設定済み
+ '323753263': 設定済み
+ '1096873652': 未設定
+ '1843776221': ロール
+ '1956102114': 編集
+ '2095247710': 経度
+ '2222144661': 緯度
+ '2299790601': ピッチ
+ '2468683988': ヘッディング
+ '2671930823': 確認
+ '3067266584': 高度
+ '3528672691': キャンセル
+ '3553425520': ジャンプ
+ '3821373974': 編集
+ '4211710217': キャプチャ
ColorField:
- "1115770113": 保存
- "1533357798": 未設定
- "3528672691": キャンセル
+ '1115770113': 保存
+ '1533357798': 未設定
+ '3528672691': キャンセル
LocationField:
- "2222144661": 緯度
- "3067266584": 高度
- "4252415638": 経度
+ '2222144661': 緯度
+ '3067266584': 高度
+ '4252415638': 経度
NonEditableField:
- "1777212703": "この値は{datasetField}にリンクされています"
- "3724530840": この値は現在変更できません
+ '1777212703': 'この値は{datasetField}にリンクされています'
+ '3724530840': この値は現在変更できません
PropertyTitle:
PropertyLinkPanel:
- "70866805": データセットからリンクする
- "579507252": ""
- "773082751": 設定をリセット
- "910188724": 選択可能なアイテムがありません
- "1518809512": ""
- "1592005573": 設定を上書き
- "3068746276": 設定をリセット
- "3457675054": 未リンク
- "3889579101": リンク先
+ '70866805': データセットからリンクする
+ '579507252': ''
+ '773082751': 設定をリセット
+ '910188724': 選択可能なアイテムがありません
+ '1518809512': ''
+ '1592005573': 設定を上書き
+ '3068746276': 設定をリセット
+ '3457675054': 未リンク
+ '3889579101': リンク先
TypographyField:
FontFamilyField:
- "3834040466": フォント
+ '3834040466': フォント
FontSizeField:
- "3704724012": サイズ
+ '3704724012': サイズ
URLField:
- "1533357798": 未設定
+ '1533357798': 未設定
PropertyItem:
- "367293545": インフォボックスとその内容を削除します。本当によろしいですか?
- "660592555": 確認
- "2719744159": テンプレート
- "3528672691": キャンセル
- "3645414921": 削除
- "3682158234": インフォボックス
- "3908299371": テンプレート
+ '367293545': インフォボックスとその内容を削除します。本当によろしいですか?
+ '660592555': 確認
+ '2719744159': テンプレート
+ '3528672691': キャンセル
+ '3645414921': 削除
+ '3682158234': インフォボックス
+ '3908299371': テンプレート
PropertyList:
- "179601186": リスト
+ '179601186': リスト
WidgetAlignSystemToggle:
- "2313839684": ウィジェットの配置を編集
+ '2313839684': ウィジェットの配置を編集
PublicationModal:
- "383867403": コピー
- "562103780": "**Warning**このプロジェクトを埋め込んだWebサイトへ影響を及ぼす可能性があります。"
- "660270439": プロジェクトが公開されました。
- "951834708": 公開されたプロジェクトが更新されます。公開されているプロジェクトへ現在の内容が上書きされます。
- "1267684353": プロジェクトを公開する
- "1458938618": 更新する
- "1545651299": プロジェクトを非公開にする
- "1547167026": 公開
- "1848511752": 公開URL
- "2051262815": 検索可能にする
- "2324218928": 閉じる
- "2837536782": その他のWebサイトでこのプロジェクトを埋め込む場合は、こちらのコードを使用してください
- "3017637822": "* このリンクを知っているインターネット上の全員が閲覧できます"
- "3185451863": おめでとうございます!
- "3528672691": キャンセル
- "3575955052": プロジェクトが公開されます。URLを知っている人は誰でもこのプロジェクトを見ることができるようになります。
- "3577703060": 確認
- "3640052215": 非公開にする
- "3701940701": その他の設定
- "3733220817": URLを知っている人もこのプロジェクトを見ることができなくなります。
- "3869801582": 埋め込み用コード
- "4062044511": プロジェクトを更新する
+ '383867403': コピー
+ '562103780': '**Warning**このプロジェクトを埋め込んだWebサイトへ影響を及ぼす可能性があります。'
+ '660270439': プロジェクトが公開されました。
+ '951834708': 公開されたプロジェクトが更新されます。公開されているプロジェクトへ現在の内容が上書きされます。
+ '1267684353': プロジェクトを公開する
+ '1458938618': 更新する
+ '1545651299': プロジェクトを非公開にする
+ '1547167026': 公開
+ '1848511752': 公開URL
+ '2051262815': 検索可能にする
+ '2324218928': 閉じる
+ '2837536782': その他のWebサイトでこのプロジェクトを埋め込む場合は、こちらのコードを使用してください
+ '3017637822': '* このリンクを知っているインターネット上の全員が閲覧できます'
+ '3185451863': おめでとうございます!
+ '3528672691': キャンセル
+ '3575955052': プロジェクトが公開されます。URLを知っている人は誰でもこのプロジェクトを見ることができるようになります。
+ '3577703060': 確認
+ '3640052215': 非公開にする
+ '3701940701': その他の設定
+ '3733220817': URLを知っている人もこのプロジェクトを見ることができなくなります。
+ '3869801582': 埋め込み用コード
+ '4062044511': プロジェクトを更新する
Settings:
Account:
AccountSection:
- "819371392": ライトテーマ
- "1049124733": 言語設定
- "1236122549": 自動
- "1658146436": カラーテーマ
- "1766832403": Emailアドレス
- "1840107345": ダークテーマ
- "2237029987": パスワード
- "3198092477": アカウント
- "3923994153": ライトテーマはまだベータ版です。サポートされていない機能があります。(例:ライトテーマで公開版プロジェクトは作成できません)
+ '819371392': ライトテーマ
+ '1049124733': 言語設定
+ '1236122549': 自動
+ '1658146436': カラーテーマ
+ '1766832403': Emailアドレス
+ '1840107345': ダークテーマ
+ '2237029987': パスワード
+ '3198092477': アカウント
+ '3923994153': ライトテーマはまだベータ版です。サポートされていない機能があります。(例:ライトテーマで公開版プロジェクトは作成できません)
PasswordModal:
- "264517228": "パスワードは安全です"
- "324893002": "空白は使用できません"
- "539787951": 現在のパスワード
- "619506016": パスワードは安全です
- "740918511": 新しいパスワード
- "1234886189": アカウントを安全に保つため、パスワードが十分に安全であることを確かめてください
- "2039038750": 新しいパスワード
- "2521568990": パスワードを変更
- "3497016136": 長さが足りません
- "3627357388": パスワードは安全です
- "3907506757": 使用可能なパスワードです
- "4066780408": 長すぎます
- "4188749693": パスワードを変更
+ '264517228': パスワードは安全です
+ '324893002': 空白は使用できません
+ '539787951': 現在のパスワード
+ '619506016': パスワードは安全です
+ '740918511': 新しいパスワード
+ '1234886189': アカウントを安全に保つため、パスワードが十分に安全であることを確かめてください
+ '2039038750': 新しいパスワード
+ '2521568990': パスワードを変更
+ '3497016136': 長さが足りません
+ '3627357388': パスワードは安全です
+ '3907506757': 使用可能なパスワードです
+ '4066780408': 長すぎます
+ '4188749693': パスワードを変更
ProfileSection:
- "636461959": 名前
- "1534468327": プロフィール
- "2131015997": プロフィール画像
+ '636461959': 名前
+ '1534468327': プロフィール
+ '2131015997': プロフィール画像
Navigation:
- "165162143": アセット
- "541301752": ワークスペース一覧
- "2057458630": プラグイン
- "3135366329": 公開設定
- "3198092477": アカウント
- "3336263640": プロジェクト一覧
- "3833270271": データセット
+ '165162143': アセット
+ '541301752': ワークスペース一覧
+ '2057458630': プラグイン
+ '3135366329': 公開設定
+ '3198092477': アカウント
+ '3336263640': プロジェクト一覧
+ '3833270271': データセット
Project:
ArchivedMessage:
- "1250737101": >-
+ '1250737101': >-
プロジェクトをアーカイブ化すると、削除とアーカイブ化解除以外の編集は行えません。再度編集可能な状態にするには、プロジェクトのアーカイブ化を解除してください。
- "1354606874": 通知
+ '1354606874': 通知
BasicAuthSection:
- "256145410": ベーシック認証を有効化する
- "2237029987": パスワード
- "2663586870": ユーザーネーム
- "3076470241": ベーシック認証
+ '256145410': ベーシック認証を有効化する
+ '2237029987': パスワード
+ '2663586870': ユーザーネーム
+ '3076470241': ベーシック認証
ChangeSiteNameModal:
- "551846905": プロジェクト公開ページのサイト名を変更します。アルファベットとハイフン(-)のみ利用可能です。
- "1115770113": 保存
- "2397004844": サイト名を変更
- "3528672691": キャンセル
+ '551846905': プロジェクト公開ページのサイト名を変更します。アルファベットとハイフン(-)のみ利用可能です。
+ '1115770113': 保存
+ '2397004844': サイト名を変更
+ '3528672691': キャンセル
DangerSection:
- "16496977": この操作をすると、プロジェクトの編集が行えなくなります。
- "181468144": この操作は取り消すことができません。
- "325391901": 確認のためこのプロジェクトの名前と入力してください
- "636677879": 重要操作
- "703292905": プロジェクトの非編集化
- "1432074936": 本当にアーカイブを解除してもよろしいですか?
- "1692420285": 本当にプロジェクトを削除してもよろしいですか。
- "2368081840": アーカイブを解除
- "2747023189": アーカイブを解除すると、チームの書き込み権限を持つユーザーによってプロジェクトの編集、設定変更が可能になります。
- "2901501812": アーカイブを解除
- "3084110538": このプロジェクトを削除します。
- "3221869035": 本当に非編集化してもよいですか?
- "3314090612": プロジェクトを非編集化する
- "3536297264": プロジェクトを削除すると復元はできません。慎重に行ってください。
- "3557712431": プロジェクト削除
- "3912825707": この設定はいつでも戻すことができます。
- "4078297214": プロジェクトを編集できないようにします。この設定はいつでも戻すことができます。
- "4235968010": プロジェクトを回復
- "4258544441": プロジェクトを削除
+ '16496977': この操作をすると、プロジェクトの編集が行えなくなります。
+ '181468144': この操作は取り消すことができません。
+ '325391901': 確認のためこのプロジェクトの名前と入力してください
+ '636677879': 重要操作
+ '703292905': プロジェクトの非編集化
+ '1432074936': 本当にアーカイブを解除してもよろしいですか?
+ '1692420285': 本当にプロジェクトを削除してもよろしいですか。
+ '2368081840': アーカイブを解除
+ '2747023189': アーカイブを解除すると、チームの書き込み権限を持つユーザーによってプロジェクトの編集、設定変更が可能になります。
+ '2901501812': アーカイブを解除
+ '3084110538': このプロジェクトを削除します。
+ '3221869035': 本当に非編集化してもよいですか?
+ '3314090612': プロジェクトを非編集化する
+ '3536297264': プロジェクトを削除すると復元はできません。慎重に行ってください。
+ '3557712431': プロジェクト削除
+ '3912825707': この設定はいつでも戻すことができます。
+ '4078297214': プロジェクトを編集できないようにします。この設定はいつでも戻すことができます。
+ '4235968010': プロジェクトを回復
+ '4258544441': プロジェクトを削除
Dataset:
DatasetItem:
- "2065124393": このデータセットを削除
- "3112669357": 本当に削除してよろしいですか?
- "3528672691": キャンセル
- "3645414921": 削除
+ '2065124393': このデータセットを削除
+ '3112669357': 本当に削除してよろしいですか?
+ '3528672691': キャンセル
+ '3645414921': 削除
DatasetSection:
- "293739158": データセットを追加
- "3833270271": データセット
+ '293739158': データセットを追加
+ '3833270271': データセット
Plugin:
PluginAccordion:
PluginAccordionItem:
- "31593394": アンインストール
- "730907263": インストール済み
- "1769892225": 選択中のプラグインをアンインストールします。このプラグインに紐付いたデータも削除されます。よろしいですか?
- "3480550112": インストール
- "4081365712": プラグインをアンインストールする前にご確認ください。
+ '31593394': アンインストール
+ '730907263': インストール済み
+ '1769892225': 選択中のプラグインをアンインストールします。このプラグインに紐付いたデータも削除されます。よろしいですか?
+ '3480550112': インストール
+ '4081365712': プラグインをアンインストールする前にご確認ください。
PluginSection:
PluginInstall:
- "1113831405": インストール済みプラグイン
- "1361263844": GitHubパブリックレポジトリ
- "3129492077": PCからZipファイルをアップロード
+ '1113831405': インストール済みプラグイン
+ '1361263844': GitHubパブリックレポジトリ
+ '3129492077': PCからZipファイルをアップロード
PublicRepo:
- "470394436": GitHubレポジトリからインポート
- "3528672691": キャンセル
- "3640052215": 次へ
- "4215513768": "レポジトリURL:"
+ '470394436': GitHubレポジトリからインポート
+ '3528672691': キャンセル
+ '3640052215': 次へ
+ '4215513768': 'レポジトリURL:'
ProfileSection:
- "636461959": プロジェクト名
- "1513791786": プロジェクト情報
- "2015762758": サムネイル画像
- "3374163063": プロジェクト概要
+ '636461959': プロジェクト名
+ '1513791786': プロジェクト情報
+ '2015762758': サムネイル画像
+ '3374163063': プロジェクト概要
PublicSection:
- "1124600214": ページタイトル
- "2015762758": サムネイル
- "2966836163": これらのフィールドは、SNS等に共有する際や公開プロジェクトの検索等に利用されます。
- "3374163063": ページ概要
- "3825437586": 公開詳細設定
+ '1124600214': ページタイトル
+ '2015762758': サムネイル
+ '2966836163': これらのフィールドは、SNS等に共有する際や公開プロジェクトの検索等に利用されます。
+ '3374163063': ページ概要
+ '3825437586': 公開詳細設定
PublishSection:
- "653686109": 編集画面からプロジェクトが公開されると、URLの詳細がここに表示されます。
- "784802132": サイト設定
- "3352828776": ""
- "3572249962": サイト名
+ '653686109': 編集画面からプロジェクトが公開されると、URLの詳細がここに表示されます。
+ '784802132': サイト設定
+ '3352828776': ''
+ '3572249962': サイト名
StatusSection:
- "2025719264": このプロジェクトは、検索エンジンのインデックスを無効にした状態で公開されています。
- "3306960224": このプロジェクトは、非公開です。
- "4019421471": このプロジェクトは、検索エンジンのインデックスを有効にした状態で公開されています。
+ '2025719264': このプロジェクトは、検索エンジンのインデックスを無効にした状態で公開されています。
+ '3306960224': このプロジェクトは、非公開です。
+ '4019421471': このプロジェクトは、検索エンジンのインデックスを有効にした状態で公開されています。
ProjectList:
ProjectCell:
- "3038786653": プロジェクト名未設定
- "4204406466": プロジェクト概要未設定
+ '3038786653': プロジェクト名未設定
+ '4204406466': プロジェクト概要未設定
ProjectList:
- "899189507": 現在のプロジェクト
- "1355637676": アーカイブ済みプロジェクト
- "4146466746": 新規プロジェクト
+ '899189507': 現在のプロジェクト
+ '1355637676': アーカイブ済みプロジェクト
+ '4146466746': 新規プロジェクト
SettingsHeader:
- "893550186": (パーソナルワークスペース)
+ '893550186': (パーソナルワークスペース)
Workspace:
AddMemberModal:
- "2509478264": メンバーを追加
- "2914740708": メールアドレスもしくはユーザー名を入力
- "3099331554": 追加
- "3528672691": キャンセル
+ '2509478264': メンバーを追加
+ '2914740708': メールアドレスもしくはユーザー名を入力
+ '3099331554': 追加
+ '3528672691': キャンセル
DangerSection:
- "181468144": この操作は取り消すことができません。
- "636677879": Danger Zone
- "904076184": ワークスペースを削除すると復元することはできません。よくお確かめください。
- "2478692658": ワークスペースを削除
- "3240562240": ワークスペース削除
- "3321682164": この操作をすると、このワークスペース及び関連するすべてのプロジェクト・アセット・データセットが永久に削除されます。
- "3399326760": ワークスペースを削除します。
- "4086722238": 操作を続行するにはこのワークスペース名を入力してください。
+ '181468144': この操作は取り消すことができません。
+ '636677879': Danger Zone
+ '904076184': ワークスペースを削除すると復元することはできません。よくお確かめください。
+ '2478692658': ワークスペースを削除
+ '3240562240': ワークスペース削除
+ '3321682164': この操作をすると、このワークスペース及び関連するすべてのプロジェクト・アセット・データセットが永久に削除されます。
+ '3399326760': ワークスペースを削除します。
+ '4086722238': 操作を続行するにはこのワークスペース名を入力してください。
MemberListItem:
- "1068157859": 編集
- "1954432048": 閲覧
- "3470351671": オーナー
+ '1068157859': 編集
+ '1954432048': 閲覧
+ '3470351671': オーナー
MembersSection:
- "721495104": 新規メンバー
- "2734377620": メンバー
+ '721495104': 新規メンバー
+ '2734377620': メンバー
ProfileSection:
- "2999985900": ワークスペース名
+ '2999985900': ワークスペース名
WorkspaceList:
WorkspaceCell:
- "808766300": 無題のワークスペース
- "3230245813": メンバーズ
- "4106929473": ""
+ '808766300': 無題のワークスペース
+ '3230245813': メンバーズ
+ '4106929473': ''
WorkspaceList:
- "3435539653": すべてのワークスペース
- "3828443189": 新規ワークスペース
+ '3435539653': すべてのワークスペース
+ '3828443189': 新規ワークスペース
Visualizer:
Block:
Text:
- "463005216": ダブルクリックで入力
+ '463005216': ダブルクリックで入力
Infobox:
- "3037025019": マウスをここへ、“+”をクリックしコンテンツを追加
+ '3037025019': マウスをここへ、“+”をクリックしコンテンツを追加
organisms:
Dashboard:
- "118901803": 新しいプロジェクトの作成に成功しました!
- "1043376506": プロジェクトの作成に失敗しました。
- "1573629237": 新しいワークスペースの作成に成功しました!
+ '118901803': 新しいプロジェクトの作成に成功しました!
+ '1043376506': プロジェクトの作成に失敗しました。
+ '1573629237': 新しいワークスペースの作成に成功しました!
EarthEditor:
DataSourcePane:
- "8458775": ひとつのデータセットが削除されました。
- "373918798": データセットの削除に失敗しました。
- "517189107": データセットの追加に成功しました。
- "1235836640": データセットの追加に失敗しました。
+ '8458775': ひとつのデータセットが削除されました。
+ '373918798': データセットの削除に失敗しました。
+ '517189107': データセットの追加に成功しました。
+ '1235836640': データセットの追加に失敗しました。
+ DatasetInfoPane:
+ '646776720': レイヤーが作成されました。
+ '1221302534': レイヤーの作成に失敗しました。
Header:
- "329817781": プロジェクトは非公開状態です。現在、誰も閲覧することはできません。
- "393928859": プロジェクトの公開に成功しました!
- "1300930556": 検索エンジンのインデックス含めてプロジェクトの公開に成功しました!
- "1754679519": クリップボードにコピーしました。
- "3374937831": プロジェクトの公開に失敗しました。
+ '329817781': プロジェクトは非公開状態です。現在、誰も閲覧することはできません。
+ '393928859': プロジェクトの公開に成功しました!
+ '1300930556': 検索エンジンのインデックス含めてプロジェクトの公開に成功しました!
+ '1754679519': クリップボードにコピーしました。
+ '3374937831': プロジェクトの公開に失敗しました。
LeftMenu:
- "3127270027": アウトライン
- "3833270271": データセット
+ '3127270027': アウトライン
+ '3833270271': データセット
OutlinePane:
- "24000205": 新規フォルダ
+ '24000205': 新規フォルダ
RightMenu:
- "422058490": レイヤー
- "1538011248": シーン
- "1676374721": ウィジェット
- "1884622259": インフォボックス
- "2793623359": ウィジェット
- "3590336714": エクスポート
+ '422058490': レイヤー
+ '1538011248': シーン
+ '1676374721': ウィジェット
+ '1884622259': インフォボックス
+ '2793623359': ウィジェット
+ '3590336714': エクスポート
Notification:
- "687096634": 注意
- "1354606874": お知らせ
- "2845142593": エラー
- "3620760668": 何らかの問題が発生しました。しばらく経ってからお試しください。
+ '687096634': 注意
+ '1354606874': お知らせ
+ '2845142593': エラー
+ '3620760668': 何らかの問題が発生しました。しばらく経ってからお試しください。
Settings:
Account:
- "536986583": 言語の変更に失敗しました。
- "1420361838": パスワードの更新に失敗しました。
- "1443501844": テーマの変更に失敗しました。
- "3198092477": アカウント
- "3937010984": アカウント名の変更に失敗しました。
- "4233838386": パスワードの更新が完了しました。
+ '536986583': 言語の変更に失敗しました。
+ '1420361838': パスワードの更新に失敗しました。
+ '1443501844': テーマの変更に失敗しました。
+ '3198092477': アカウント
+ '3937010984': アカウント名の変更に失敗しました。
+ '4233838386': パスワードの更新が完了しました。
Project:
- "159368865": プロジェクトの削除に失敗しました。
- "458538859": プロジェクトを非編集状態にしました。
- "1212782674": プロジェクトの非編集状態に失敗しました。
- "2614602809": プロジェクトの非編集化が解除されました。このプロジェクトは編集可能です。
- "2666836613": プロジェクトの非編集化の解除に失敗しました。
- "2767494453": プロジェクトが削除されました。
+ '159368865': プロジェクトの削除に失敗しました。
+ '458538859': プロジェクトを非編集状態にしました。
+ '1212782674': プロジェクトの非編集状態に失敗しました。
+ '2614602809': プロジェクトの非編集化が解除されました。このプロジェクトは編集可能です。
+ '2666836613': プロジェクトの非編集化の解除に失敗しました。
+ '2767494453': プロジェクトが削除されました。
Dataset:
- "94263160": デーだセットの削除に失敗したました。
- "1218000428": データセットが削除されました。
- "3833270271": データセット
+ '94263160': デーだセットの削除に失敗したました。
+ '1218000428': データセットが削除されました。
+ '3833270271': データセット
Plugin:
- "1179803049": プラグインがインストールされました。
- "1442994697": プラグインのインストールに失敗しました。
- "1961603541": プラグインの削除に失敗しました。
- "1991459155": プラグインが削除されました。
- "2057458630": プラグイン
+ '1179803049': プラグインがインストールされました。
+ '1442994697': プラグインのインストールに失敗しました。
+ '1961603541': プラグインの削除に失敗しました。
+ '1991459155': プラグインが削除されました。
+ '2057458630': プラグイン
Public:
- "3135366329": 公開設定
+ '3135366329': 公開設定
ProjectList:
- "118901803": 新しいプロジェクトの作成に成功しました!
- "1043376506": プロジェクトの作成に失敗しました。
- "3336263640": プロジェクト一覧
+ '118901803': 新しいプロジェクトの作成に成功しました!
+ '1043376506': プロジェクトの作成に失敗しました。
+ '3336263640': プロジェクト一覧
Workspace:
- "905470392": メンバーの削除に失敗しました。
- "1979109196": ワークスペースの作成に失敗しました。
- "2491404296": 新しいワークスペースの作成に成功しました!
- "2536720333": このワークスペースからひとりのメンバーを削除しました。
- "2541564604": ワークスペース名の変更に失敗しました。
- "2578195155": ワークスペースの削除に失敗しました。
- "2877996676": ワークスペースを削除しました。
- "3360288793": このワークスペースに新しいメンバーを追加しました。
- "3996792911": メンバーの追加に失敗しました。
- "4038320151": ワークスペース名を変更しました。
+ '905470392': メンバーの削除に失敗しました。
+ '1979109196': ワークスペースの作成に失敗しました。
+ '2491404296': 新しいワークスペースの作成に成功しました!
+ '2536720333': このワークスペースからひとりのメンバーを削除しました。
+ '2541564604': ワークスペース名の変更に失敗しました。
+ '2578195155': ワークスペースの削除に失敗しました。
+ '2877996676': ワークスペースを削除しました。
+ '3360288793': このワークスペースに新しいメンバーを追加しました。
+ '3996792911': メンバーの追加に失敗しました。
+ '4038320151': ワークスペース名を変更しました。
Asset:
- "165162143": アセット
- "325979456": アセットの作成に失敗しました。
- "2700226140": アセットの追加に成功しました。
- "3402808678": アセットの削除に失敗しまたした。
- "4222118896": アセットが削除されました。
+ '165162143': アセット
+ '325979456': アセットの作成に失敗しました。
+ '2700226140': アセットの追加に成功しました。
+ '3402808678': アセットの削除に失敗しまたした。
+ '4222118896': アセットが削除されました。
WorkspaceList:
- "541301752": ワークスペース一覧
+ '541301752': ワークスペース一覧
pages:
Authentication:
LoginPage:
- "1704018516": ログインできませんでした。ユーザー名・メールアドレス・パスワードを再度ご確認ください。
+ '1704018516': ログインできませんでした。ユーザー名・メールアドレス・パスワードを再度ご確認ください。