in packages/graph-explorer/src/workspaces/DataExplorer/DataExplorer.tsx [183:261]
function DisplayNameAndDescriptionOptions({
vertexType,
}: {
vertexType: string;
}) {
const t = useTranslations();
const vertexConfig = useVertexTypeConfig(vertexType);
const displayConfig = useDisplayVertexTypeConfig(vertexType);
const selectOptions = useMemo(() => {
const options = displayConfig.attributes.map(attr => ({
value: attr.name,
label: attr.displayLabel,
}));
options.unshift({
label: t("data-explorer.node-type"),
value: RESERVED_TYPES_PROPERTY,
});
options.unshift({
label: t("data-explorer.node-id"),
value: RESERVED_ID_PROPERTY,
});
return options;
}, [displayConfig.attributes, t]);
const setUserStyling = useSetAtom(userStylingAtom);
const onDisplayNameChange = useCallback(
(field: "name" | "longName") => async (value: string | string[]) => {
await setUserStyling(async prevStyling => {
const prevValue = await prevStyling;
const vtItem =
clone(prevValue.vertices?.find(v => v.type === vertexType)) ||
({} as VertexPreferences);
if (field === "name") {
vtItem.displayNameAttribute = value as string;
}
if (field === "longName") {
vtItem.longDisplayNameAttribute = value as string;
}
return {
...prevValue,
vertices: [
...(prevValue.vertices || []).filter(v => v.type !== vertexType),
{
...(vtItem || {}),
type: vertexType,
},
],
};
});
},
[setUserStyling, vertexType]
);
return (
<div className="header-children">
<SelectField
className="w-[200px]"
value={vertexConfig?.displayNameAttribute || ""}
onValueChange={onDisplayNameChange("name")}
options={selectOptions}
label="Display Name"
labelPlacement="inner"
/>
<SelectField
className="w-[200px]"
value={vertexConfig?.longDisplayNameAttribute || ""}
onValueChange={onDisplayNameChange("longName")}
options={selectOptions}
label="Display Description"
labelPlacement="inner"
/>
</div>
);
}