gitscope
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/modules/services/components/tables/inbounds/index.tsx · v0.7.0
Source
1 7738ec1 Mardin 2y ago import { type FC, useCallback, useState } from "react";
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 3b7feef Mrdn 2y ago import { columns } from "./columns";
5 d636f3f Dawsh 2y ago import { type ServiceType, useServicesUpdateMutation, fetchSelectableServiceInbounds } from "@marzneshin/modules/services";
6 3b7feef Mrdn 2y ago import { useTranslation } from "react-i18next";
7 3b7feef Mrdn 2y ago
8 3b7feef Mrdn 2y ago interface ServiceInboundsTableProps {
9 3072f60 Mrdn 2y ago service: ServiceType;
10 3b7feef Mrdn 2y ago }
11 3b7feef Mrdn 2y ago
12 3072f60 Mrdn 2y ago export const ServiceInboundsTable: FC<ServiceInboundsTableProps> = ({
13 3072f60 Mrdn 2y ago service,
14 3072f60 Mrdn 2y ago }) => {
15 3b7feef Mrdn 2y ago const { mutate: updateService } = useServicesUpdateMutation();
16 7738ec1 Mardin 2y ago const { selectedRow, setSelectedRow } =
17 7738ec1 Mardin 2y ago useRowSelection(Object.fromEntries(service.inbound_ids.map(entityId => [String(entityId), true])));
18 7738ec1 Mardin 2y ago const [selectedInbound, setSelectedInbound] = useState<number[]>(service.inbound_ids);
19 3072f60 Mrdn 2y ago const { t } = useTranslation();
20 3b7feef Mrdn 2y ago
21 3b7feef Mrdn 2y ago const handleApply = useCallback(() => {
22 7738ec1 Mardin 2y ago updateService({ id: service.id, name: service.name, inbound_ids: selectedInbound });
23 7738ec1 Mardin 2y ago }, [selectedInbound, service, updateService]);
24 3b7feef Mrdn 2y ago
25 7738ec1 Mardin 2y ago const disabled = Object.keys(selectedRow).length < 1;
26 3b7feef Mrdn 2y ago
27 3b7feef Mrdn 2y ago return (
28 3b7feef Mrdn 2y ago <div className="flex flex-col gap-4">
29 7738ec1 Mardin 2y ago <SelectableEntityTable
30 3b7feef Mrdn 2y ago columns={columns}
31 7738ec1 Mardin 2y ago entityKey="inbounds"
32 7738ec1 Mardin 2y ago parentEntityKey="services"
33 7738ec1 Mardin 2y ago parentEntityId={service.id}
34 7738ec1 Mardin 2y ago existingEntityIds={service.inbound_ids}
35 7738ec1 Mardin 2y ago fetchEntity={fetchSelectableServiceInbounds}
36 7738ec1 Mardin 2y ago primaryFilter="tag"
37 7738ec1 Mardin 2y ago rowSelection={{ selectedRow: selectedRow, setSelectedRow: setSelectedRow }}
38 7738ec1 Mardin 2y ago entitySelection={{ selectedEntity: selectedInbound, setSelectedEntity: setSelectedInbound }}
39 3b7feef Mrdn 2y ago />
40 3b7feef Mrdn 2y ago
41 3072f60 Mrdn 2y ago <Button onClick={handleApply} disabled={disabled}>
42 3072f60 Mrdn 2y ago {t("apply")}
43 3072f60 Mrdn 2y ago </Button>
44 3b7feef Mrdn 2y ago </div>
45 3072f60 Mrdn 2y ago );
46 3072f60 Mrdn 2y ago };