|
|
|
@ -32,17 +32,15 @@ const tableHeader = [
|
|
|
|
{ label: "Action", width: "10%", style: "word-break: keep-all;" },
|
|
|
|
{ label: "Action", width: "10%", style: "word-break: keep-all;" },
|
|
|
|
];
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
type SearchType = "전체" | "제목" | "작성자";
|
|
|
|
type SearchType = "전체" | "제목";
|
|
|
|
const searchOptions = [
|
|
|
|
const searchOptions = [
|
|
|
|
{ label: "전체", value: "전체" as SearchType },
|
|
|
|
{ label: "전체", value: "전체" as SearchType },
|
|
|
|
{ label: "제목", value: "제목" as SearchType },
|
|
|
|
{ label: "제목", value: "제목" as SearchType },
|
|
|
|
{ label: "작성자", value: "작성자" as SearchType },
|
|
|
|
|
|
|
|
];
|
|
|
|
];
|
|
|
|
const SEARCH_TYPE_MAP: Record<SearchType | "", "ALL" | "TITLE" | "AUTHOR"> = {
|
|
|
|
const SEARCH_TYPE_MAP: Record<SearchType | "", "ALL" | "TITLE"> = {
|
|
|
|
"": "ALL",
|
|
|
|
"": "ALL",
|
|
|
|
전체: "ALL",
|
|
|
|
전체: "ALL",
|
|
|
|
제목: "TITLE",
|
|
|
|
제목: "TITLE",
|
|
|
|
작성자: "AUTHOR",
|
|
|
|
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const pageSizeOptions = [
|
|
|
|
const pageSizeOptions = [
|
|
|
|
@ -282,11 +280,7 @@ function includes(hay: any, needle: string) {
|
|
|
|
if (!hay) return false;
|
|
|
|
if (!hay) return false;
|
|
|
|
return String(hay).toLowerCase().includes(needle.toLowerCase());
|
|
|
|
return String(hay).toLowerCase().includes(needle.toLowerCase());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
function matchBySearchType(
|
|
|
|
function matchBySearchType(rowRaw: any, mapped: "ALL" | "TITLE", kw: string) {
|
|
|
|
rowRaw: any,
|
|
|
|
|
|
|
|
mapped: "ALL" | "TITLE" | "AUTHOR",
|
|
|
|
|
|
|
|
kw: string,
|
|
|
|
|
|
|
|
) {
|
|
|
|
|
|
|
|
if (!kw) return true;
|
|
|
|
if (!kw) return true;
|
|
|
|
|
|
|
|
|
|
|
|
// 제목 후보들
|
|
|
|
// 제목 후보들
|
|
|
|
@ -298,22 +292,11 @@ function matchBySearchType(
|
|
|
|
rowRaw.pipeline?.displayName,
|
|
|
|
rowRaw.pipeline?.displayName,
|
|
|
|
rowRaw.pipeline?.name,
|
|
|
|
rowRaw.pipeline?.name,
|
|
|
|
];
|
|
|
|
];
|
|
|
|
// 작성자 후보들
|
|
|
|
|
|
|
|
const authorFields = [
|
|
|
|
|
|
|
|
rowRaw.username,
|
|
|
|
|
|
|
|
rowRaw.userName,
|
|
|
|
|
|
|
|
rowRaw.owner,
|
|
|
|
|
|
|
|
rowRaw.createdBy,
|
|
|
|
|
|
|
|
rowRaw.user?.name,
|
|
|
|
|
|
|
|
rowRaw.user?.username,
|
|
|
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (mapped === "TITLE") {
|
|
|
|
if (mapped === "TITLE") {
|
|
|
|
return titleFields.some((v) => includes(v, kw));
|
|
|
|
return titleFields.some((v) => includes(v, kw));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (mapped === "AUTHOR") {
|
|
|
|
|
|
|
|
return authorFields.some((v) => includes(v, kw));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// ALL: 제목/작성자 + 기타 설명, 태그까지 포괄
|
|
|
|
// ALL: 제목/작성자 + 기타 설명, 태그까지 포괄
|
|
|
|
const extraFields = [
|
|
|
|
const extraFields = [
|
|
|
|
rowRaw.description,
|
|
|
|
rowRaw.description,
|
|
|
|
@ -321,9 +304,7 @@ function matchBySearchType(
|
|
|
|
rowRaw.tags,
|
|
|
|
rowRaw.tags,
|
|
|
|
rowRaw.tagString,
|
|
|
|
rowRaw.tagString,
|
|
|
|
];
|
|
|
|
];
|
|
|
|
return [...titleFields, ...authorFields, ...extraFields].some((v) =>
|
|
|
|
return [...titleFields, ...extraFields].some((v) => includes(v, kw));
|
|
|
|
includes(v, kw),
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
async function fetchList() {
|
|
|
|
async function fetchList() {
|
|
|
|
|