temporary server action for group and inside
This commit is contained in:
@@ -3,20 +3,12 @@
|
|||||||
import { LocationContext } from "@/components/locationContext";
|
import { LocationContext } from "@/components/locationContext";
|
||||||
import { useContext, useState } from "react";
|
import { useContext, useState } from "react";
|
||||||
import Grouping from "./Grouping";
|
import Grouping from "./Grouping";
|
||||||
|
import { Group, JobCategory, updateGroups } from "./action";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
allJobs: JobCategory[];
|
allJobs: JobCategory[];
|
||||||
};
|
};
|
||||||
|
|
||||||
export type JobCategory = {
|
|
||||||
id: number;
|
|
||||||
name: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
type Group = {
|
|
||||||
id: number;
|
|
||||||
jobs: number[];
|
|
||||||
};
|
|
||||||
export default function GroupCreator({ allJobs }: Props) {
|
export default function GroupCreator({ allJobs }: Props) {
|
||||||
const locationContext = useContext(LocationContext);
|
const locationContext = useContext(LocationContext);
|
||||||
const [usedJobs, setUsedJobs] = useState<number[]>([]);
|
const [usedJobs, setUsedJobs] = useState<number[]>([]);
|
||||||
@@ -40,7 +32,22 @@ export default function GroupCreator({ allJobs }: Props) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function submit() {} //TODO! submit group
|
async function submit() {
|
||||||
|
if (
|
||||||
|
locationContext?.zone[0] == undefined ||
|
||||||
|
locationContext?.province[0] == undefined
|
||||||
|
) {
|
||||||
|
alert("ยังไม่ได้เลือกพื้นที่");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await updateGroups(
|
||||||
|
locationContext.province[0],
|
||||||
|
locationContext.zone[0],
|
||||||
|
groups,
|
||||||
|
);
|
||||||
|
|
||||||
|
alert("อัพเดทสำเร็จ");
|
||||||
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
locationContext?.zone[0] == undefined ||
|
locationContext?.zone[0] == undefined ||
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import { JobCategory } from "./GroupCreator";
|
import { JobCategory } from "./action";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
availableJobs: JobCategory[];
|
availableJobs: JobCategory[];
|
||||||
@@ -19,16 +19,17 @@ export default function Grouping({
|
|||||||
const _id = parseInt(id);
|
const _id = parseInt(id);
|
||||||
const job = availableJobs.find((j) => j.id == _id);
|
const job = availableJobs.find((j) => j.id == _id);
|
||||||
if (job == undefined) return;
|
if (job == undefined) return;
|
||||||
setSelectedJob((old) => [...old, job]);
|
const newSelectedJob = [...selectedJob, job];
|
||||||
|
setSelectedJob(newSelectedJob);
|
||||||
selectJob(_id);
|
selectJob(_id);
|
||||||
|
updateGroup(newSelectedJob.map((j) => j.id));
|
||||||
}
|
}
|
||||||
function removeJobFromGroup(id: number) {
|
function removeJobFromGroup(id: number) {
|
||||||
setSelectedJob((old) => old.filter((j) => j.id != id));
|
const newSelectedJob = selectedJob.filter((j) => j.id != id);
|
||||||
|
setSelectedJob(newSelectedJob);
|
||||||
removeJob(id);
|
removeJob(id);
|
||||||
|
updateGroup(newSelectedJob.map((j) => j.id));
|
||||||
}
|
}
|
||||||
useEffect(() => {
|
|
||||||
updateGroup(selectedJob.map((j) => j.id));
|
|
||||||
}, [selectedJob, updateGroup]);
|
|
||||||
return (
|
return (
|
||||||
<div className="m-2 flex w-full flex-col gap-2 rounded-md border border-black p-2 shadow-md">
|
<div className="m-2 flex w-full flex-col gap-2 rounded-md border border-black p-2 shadow-md">
|
||||||
{selectedJob.map((j) => (
|
{selectedJob.map((j) => (
|
||||||
|
|||||||
20
app/grouping/action.ts
Normal file
20
app/grouping/action.ts
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
"use server";
|
||||||
|
|
||||||
|
export type JobCategory = {
|
||||||
|
id: number;
|
||||||
|
name: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type Group = {
|
||||||
|
id: number;
|
||||||
|
jobs: number[];
|
||||||
|
};
|
||||||
|
|
||||||
|
//TODO: submit group
|
||||||
|
export async function updateGroups(
|
||||||
|
province: number,
|
||||||
|
zone: number,
|
||||||
|
groups: Group[],
|
||||||
|
) {
|
||||||
|
console.log({ province, zone, groups });
|
||||||
|
}
|
||||||
@@ -7,14 +7,15 @@ type Props = {
|
|||||||
export default function IdComponent({ updateIdList }: Props) {
|
export default function IdComponent({ updateIdList }: Props) {
|
||||||
const [idSet, setIdSet] = useState<Set<string>>(new Set());
|
const [idSet, setIdSet] = useState<Set<string>>(new Set());
|
||||||
const onValidId = (id: string) => {
|
const onValidId = (id: string) => {
|
||||||
setIdSet((prev) => new Set(prev.add(id)));
|
const newSet = new Set(idSet.add(id));
|
||||||
|
setIdSet(newSet);
|
||||||
|
updateIdList([...newSet]);
|
||||||
};
|
};
|
||||||
const removeCid = (id: string) => {
|
const removeCid = (id: string) => {
|
||||||
setIdSet((prev) => new Set([...prev].filter((x) => x !== id)));
|
const newSet = new Set([...idSet].filter((x) => x !== id));
|
||||||
|
setIdSet(newSet);
|
||||||
|
updateIdList([...newSet]);
|
||||||
};
|
};
|
||||||
useEffect(() => {
|
|
||||||
updateIdList([...idSet]);
|
|
||||||
}, [idSet, updateIdList]);
|
|
||||||
return (
|
return (
|
||||||
<div className="flex justify-center">
|
<div className="flex justify-center">
|
||||||
<div className="flex flex-col gap-2">
|
<div className="flex flex-col gap-2">
|
||||||
|
|||||||
5
app/inside/action.ts
Normal file
5
app/inside/action.ts
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
"use server";
|
||||||
|
|
||||||
|
export async function saveUser(ids: string[]) {
|
||||||
|
console.log(ids);
|
||||||
|
} //TODO: submit inside user
|
||||||
@@ -1,10 +1,14 @@
|
|||||||
"use client";
|
"use client";
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
|
import { saveUser } from "./action";
|
||||||
import IdComponent from "./IdComponent";
|
import IdComponent from "./IdComponent";
|
||||||
|
|
||||||
export default function Page() {
|
export default function Page() {
|
||||||
const [idList, setIdList] = useState<string[]>([]);
|
const [idList, setIdList] = useState<string[]>([]);
|
||||||
function submit() {} //TODO! submit inside user
|
async function submit() {
|
||||||
|
await saveUser(idList);
|
||||||
|
alert("อัพเดทสำเร็จ");
|
||||||
|
}
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<IdComponent updateIdList={(cids) => setIdList(cids)} />
|
<IdComponent updateIdList={(cids) => setIdList(cids)} />
|
||||||
|
|||||||
Reference in New Issue
Block a user