Some checks failed
CodeQL / Analyze (javascript) (push) Failing after 16s
CodeQL / Analyze (python) (push) Failing after 3s
i18n sync check / check:sync (push) Failing after 3s
React Doctor / react-doctor (push) Failing after 16s
Branch Build CE / Build-Push Admin Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge Admin Manifest (push) Has been cancelled
Branch Build CE / Build-Push Web Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge Web Manifest (push) Has been cancelled
Branch Build CE / Build-Push Space Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge Proxy Manifest (push) Has been cancelled
Branch Build CE / Merge Space Manifest (push) Has been cancelled
Branch Build CE / Prepare AIO Assets (push) Has been cancelled
Branch Build CE / Build Setup (push) Has been cancelled
Branch Build CE / Build-Push Live Collaboration Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge Live Collaboration Manifest (push) Has been cancelled
Branch Build CE / Build-Push API Server Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge API Server Manifest (push) Has been cancelled
Branch Build CE / Build-Push Proxy Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Build-Push AIO Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge AIO Manifest (push) Has been cancelled
Branch Build CE / Upload Build Assets (push) Has been cancelled
Branch Build CE / Build Release (push) Has been cancelled
62 lines
2.0 KiB
TypeScript
62 lines
2.0 KiB
TypeScript
/**
|
|
* Copyright (c) 2023-present Plane Software, Inc. and contributors
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
* See the LICENSE file for details.
|
|
*/
|
|
|
|
import { observer } from "mobx-react";
|
|
// plane imports
|
|
import { START_OF_THE_WEEK_OPTIONS } from "@plane/constants";
|
|
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
|
|
import type { EStartOfTheWeek } from "@plane/types";
|
|
import { CustomSelect } from "@plane/ui";
|
|
// components
|
|
import { SettingsControlItem } from "@/components/settings/control-item";
|
|
// hooks
|
|
import { useUserProfile } from "@/hooks/store/user";
|
|
|
|
const getStartOfWeekLabel = (startOfWeek: EStartOfTheWeek) =>
|
|
START_OF_THE_WEEK_OPTIONS.find((option) => option.value === startOfWeek)?.label;
|
|
|
|
export const StartOfWeekPreference = observer(function StartOfWeekPreference(props: {
|
|
option: { title: string; description: string };
|
|
}) {
|
|
// hooks
|
|
const { data: userProfile, updateUserProfile } = useUserProfile();
|
|
|
|
const handleStartOfWeekChange = async (val: number) => {
|
|
try {
|
|
await updateUserProfile({ start_of_the_week: val });
|
|
setToast({ type: TOAST_TYPE.SUCCESS, title: "Success", message: "First day of the week updated successfully" });
|
|
} catch (_error) {
|
|
setToast({ type: TOAST_TYPE.ERROR, title: "Update failed", message: "Please try again later." });
|
|
}
|
|
};
|
|
|
|
return (
|
|
<SettingsControlItem
|
|
title={props.option.title}
|
|
description={props.option.description}
|
|
control={
|
|
<CustomSelect
|
|
value={userProfile.start_of_the_week}
|
|
label={getStartOfWeekLabel(userProfile.start_of_the_week)}
|
|
onChange={handleStartOfWeekChange}
|
|
buttonClassName="border border-subtle-1"
|
|
input
|
|
maxHeight="lg"
|
|
placement="bottom-end"
|
|
>
|
|
<>
|
|
{START_OF_THE_WEEK_OPTIONS.map((day) => (
|
|
<CustomSelect.Option key={day.value} value={day.value}>
|
|
{day.label}
|
|
</CustomSelect.Option>
|
|
))}
|
|
</>
|
|
</CustomSelect>
|
|
}
|
|
/>
|
|
);
|
|
});
|