import { Classes } from '@blueprintjs/core';
import styled from '@emotion/styled';
import { useStore } from '@tanstack/react-form';
import { useMemo } from 'react';
import { withForm } from 'react-science/ui';
import type { ExtendedWorkspace } from '../../../context/PreferencesContext.js';
import {
usePreferences,
useWorkspacesList,
} from '../../../context/PreferencesContext.js';
import Label from '../../../elements/Label.js';
import type { DropDownListItem } from '../../../elements/dropDownButton/DropDownButton.js';
import DropDownButton from '../../../elements/dropDownButton/DropDownButton.js';
import { useWorkspaceAction } from '../../../hooks/useWorkspaceAction.js';
import { workspaceDefaultProperties } from '../../../workspaces/workspaceDefaultProperties.ts';
import WorkspaceItem from '../WorkspaceItem.js';
import { GeneralSettingsDialogHeaderActionsButtons } from './general_settings_dialog_header_actions_buttons.js';
import {
formValueToWorkspace,
unsafeWorkspaceToForm,
} from './hooks/use_safe_workspace.ts';
import { defaultGeneralSettingsFormValues } from './validation.ts';
export const GeneralSettingsDialogHeader = withForm({
defaultValues: defaultGeneralSettingsFormValues,
render: function GeneralSettingsDialogHeader({ form }) {
const { reset } = form;
const baseWorkspaces = useWorkspacesList();
const { workspaces, ...preferences } = usePreferences();
const { addNewWorkspace, removeWorkspace, setActiveWorkspace } =
useWorkspaceAction();
const workspacesList = useMemo(() => {
return baseWorkspaces.concat([
{
key: 'new',
label: 'Custom workspace',
source: 'custom',
visible: true,
...workspaceDefaultProperties,
},
]);
}, [baseWorkspaces]);
const currentValues = useStore(form.store, (state) => state.values);
function handleChangeWorkspace(option: DropDownListItem) {
setActiveWorkspace(option.key);
reset(unsafeWorkspaceToForm(workspaces[option.key]));
}
function handleDeleteWorkspace(key: string) {
const isActiveWorkspace = removeWorkspace(key);
if (!isActiveWorkspace) {
return;
}
reset(unsafeWorkspaceToForm(workspaces.default));
}
function handleAddWorkspace(name: string) {
addNewWorkspace(
name,
formValueToWorkspace(currentValues, preferences.current),
);
}
function renderItem(item: DropDownListItem) {
return (
);
}
return (
);
},
});
const DialogHeader = styled.div`
cursor: default;
padding-top: 10px;
box-shadow: none;
background-color: #f8f8f8;
`;