gitscope
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/modules/users/components/tables/services/index.tsx · v0.6.5
Source
1 e6e6467 Dawsh 2y ago
2 7389ad0 Mardin 2y ago import { Button } from "@marzneshin/common/components";
3 7389ad0 Mardin 2y ago import { SelectableEntityTable, useRowSelection } from "@marzneshin/libs/entity-table";
4 857e289 Mrdn 2y ago import { columns } from "./columns";
5 857e289 Mrdn 2y ago import {
6 3072f60 Mrdn 2y ago type UserType,
7 3072f60 Mrdn 2y ago useUsersUpdateMutation,
8 e6e6467 Dawsh 2y ago } from "@marzneshin/modules/users";
9 3072f60 Mrdn 2y ago import { useTranslation } from "react-i18next";
10 d636f3f Dawsh 2y ago import { fetchUserServices } from "@marzneshin/modules/services";
11 e6e6467 Dawsh 2y ago import { useState, useCallback, FC } from "react";
12 857e289 Mrdn 2y ago
13 857e289 Mrdn 2y ago interface UserServicesTableProps {
14 3072f60 Mrdn 2y ago user: UserType;
15 857e289 Mrdn 2y ago }
16 857e289 Mrdn 2y ago
17 857e289 Mrdn 2y ago export const UserServicesTable: FC<UserServicesTableProps> = ({ user }) => {
18 857e289 Mrdn 2y ago const { mutate: updateUser } = useUsersUpdateMutation();
19 7738ec1 Mardin 2y ago const { selectedRow, setSelectedRow } =
20 7738ec1 Mardin 2y ago useRowSelection(
21 7738ec1 Mardin 2y ago Object.fromEntries(
22 7738ec1 Mardin 2y ago user.service_ids.map(entityId => [String(entityId), true])
23 7738ec1 Mardin 2y ago )
24 7738ec1 Mardin 2y ago );
25 7738ec1 Mardin 2y ago const [selectedService, setSelectedService] = useState<number[]>(user.service_ids);
26 3072f60 Mrdn 2y ago const { t } = useTranslation();
27 857e289 Mrdn 2y ago
28 857e289 Mrdn 2y ago const handleApply = useCallback(() => {
29 7738ec1 Mardin 2y ago updateUser({ ...user, service_ids: selectedService });
30 7738ec1 Mardin 2y ago }, [selectedService, user, updateUser]);
31 857e289 Mrdn 2y ago
32 857e289 Mrdn 2y ago return (
33 857e289 Mrdn 2y ago <div className="flex flex-col gap-4">
34 7738ec1 Mardin 2y ago <SelectableEntityTable
35 7738ec1 Mardin 2y ago fetchEntity={fetchUserServices}
36 857e289 Mrdn 2y ago columns={columns}
37 7738ec1 Mardin 2y ago primaryFilter="name"
38 7738ec1 Mardin 2y ago existingEntityIds={user.service_ids}
39 7738ec1 Mardin 2y ago entityKey="services"
40 7738ec1 Mardin 2y ago parentEntityKey="users"
41 7738ec1 Mardin 2y ago parentEntityId={user.username}
42 7738ec1 Mardin 2y ago rowSelection={{ selectedRow: selectedRow, setSelectedRow: setSelectedRow }}
43 7738ec1 Mardin 2y ago entitySelection={{ selectedEntity: selectedService, setSelectedEntity: setSelectedService }}
44 857e289 Mrdn 2y ago />
45 857e289 Mrdn 2y ago
46 7738ec1 Mardin 2y ago <Button onClick={handleApply} disabled={selectedService.length === 0}>
47 3072f60 Mrdn 2y ago {t("apply")}
48 3072f60 Mrdn 2y ago </Button>
49 857e289 Mrdn 2y ago </div>
50 3072f60 Mrdn 2y ago );
51 3072f60 Mrdn 2y ago };