Added wordings
This commit is contained in:
parent
a5b636a858
commit
d00bf52e40
81
src/collections/Wordings/Wordings.ts
Normal file
81
src/collections/Wordings/Wordings.ts
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
import { CollectionConfig } from "payload/types";
|
||||||
|
import { mustBeAdmin } from "../../accesses/collections/mustBeAdmin";
|
||||||
|
import { QuickFilters } from "../../components/QuickFilters";
|
||||||
|
import { CollectionGroups, Collections, LanguageCodes } from "../../constants";
|
||||||
|
import { rowField } from "../../fields/rowField/rowField";
|
||||||
|
import { translatedFields } from "../../fields/translatedFields/translatedFields";
|
||||||
|
import { afterOperationWebhook } from "../../hooks/afterOperationWebhook";
|
||||||
|
import { beforeDuplicateAddCopyTo } from "../../hooks/beforeDuplicateAddCopyTo";
|
||||||
|
import { buildCollectionConfig } from "../../utils/collectionConfig";
|
||||||
|
import { getAllEndpoint } from "./endpoints/getAllEndpoint";
|
||||||
|
|
||||||
|
const fields = {
|
||||||
|
name: "name",
|
||||||
|
translations: "translations",
|
||||||
|
translationsName: "name",
|
||||||
|
} as const satisfies Record<string, string>;
|
||||||
|
|
||||||
|
export const Wordings: CollectionConfig = buildCollectionConfig({
|
||||||
|
slug: Collections.Wordings,
|
||||||
|
labels: {
|
||||||
|
singular: "Wording",
|
||||||
|
plural: "Wordings",
|
||||||
|
},
|
||||||
|
defaultSort: fields.name,
|
||||||
|
admin: {
|
||||||
|
useAsTitle: fields.name,
|
||||||
|
defaultColumns: [fields.name, fields.translations],
|
||||||
|
group: CollectionGroups.Meta,
|
||||||
|
hooks: {
|
||||||
|
beforeDuplicate: beforeDuplicateAddCopyTo(fields.name),
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
BeforeListTable: [
|
||||||
|
() =>
|
||||||
|
QuickFilters({
|
||||||
|
slug: Collections.Wordings,
|
||||||
|
filterGroups: [
|
||||||
|
Object.entries(LanguageCodes).map(([key, value]) => ({
|
||||||
|
label: `∅ ${value}`,
|
||||||
|
filter: { where: { "translations.language": { not_equals: key } } },
|
||||||
|
})),
|
||||||
|
],
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
access: {
|
||||||
|
create: mustBeAdmin,
|
||||||
|
delete: mustBeAdmin,
|
||||||
|
},
|
||||||
|
hooks: {
|
||||||
|
afterOperation: [afterOperationWebhook],
|
||||||
|
},
|
||||||
|
endpoints: [getAllEndpoint],
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name: fields.name,
|
||||||
|
type: "text",
|
||||||
|
required: true,
|
||||||
|
unique: true,
|
||||||
|
},
|
||||||
|
translatedFields({
|
||||||
|
name: fields.translations,
|
||||||
|
minRows: 1,
|
||||||
|
required: true,
|
||||||
|
interfaceName: "CategoryTranslations",
|
||||||
|
admin: {
|
||||||
|
useAsTitle: fields.translationsName,
|
||||||
|
},
|
||||||
|
fields: [
|
||||||
|
rowField([
|
||||||
|
{
|
||||||
|
name: fields.translationsName,
|
||||||
|
type: "textarea",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
]),
|
||||||
|
],
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
});
|
40
src/collections/Wordings/endpoints/getAllEndpoint.ts
Normal file
40
src/collections/Wordings/endpoints/getAllEndpoint.ts
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
import payload from "payload";
|
||||||
|
import { Collections } from "../../../constants";
|
||||||
|
import { EndpointWording } from "../../../sdk";
|
||||||
|
import { CollectionEndpoint } from "../../../types/payload";
|
||||||
|
import { isPayloadType } from "../../../utils/asserts";
|
||||||
|
|
||||||
|
export const getAllEndpoint: CollectionEndpoint = {
|
||||||
|
method: "get",
|
||||||
|
path: "/all",
|
||||||
|
handler: async (req, res) => {
|
||||||
|
if (!req.user) {
|
||||||
|
return res.status(403).send({
|
||||||
|
errors: [
|
||||||
|
{
|
||||||
|
message: "You are not allowed to perform this action.",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const wordings = (
|
||||||
|
await payload.find({
|
||||||
|
collection: Collections.Wordings,
|
||||||
|
sort: "id",
|
||||||
|
pagination: false,
|
||||||
|
})
|
||||||
|
).docs;
|
||||||
|
|
||||||
|
const result: EndpointWording[] = wordings.map(({ translations, name }) => ({
|
||||||
|
name,
|
||||||
|
translations:
|
||||||
|
translations?.map(({ language, name }) => ({
|
||||||
|
language: isPayloadType(language) ? language.id : language,
|
||||||
|
name,
|
||||||
|
})) ?? [],
|
||||||
|
}));
|
||||||
|
|
||||||
|
res.status(200).json(result);
|
||||||
|
},
|
||||||
|
};
|
18
src/hooks/afterOperationWebhook.ts
Normal file
18
src/hooks/afterOperationWebhook.ts
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import { AfterOperationHook } from "payload/dist/collections/config/types";
|
||||||
|
|
||||||
|
export const afterOperationWebhook: AfterOperationHook = async ({
|
||||||
|
result,
|
||||||
|
collection,
|
||||||
|
operation,
|
||||||
|
}) => {
|
||||||
|
if (["create", "delete", "deleteByID", "update", "updateByID"].includes(operation)) {
|
||||||
|
const url = `${process.env.WEB_HOOK_URI}/collection-operation`;
|
||||||
|
await fetch(url, {
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${process.env.WEB_HOOK_TOKEN}`,
|
||||||
|
Collection: collection.slug,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
};
|
@ -26,6 +26,7 @@ import { VideosChannels } from "./collections/VideosChannels/VideosChannels";
|
|||||||
import { Weapons } from "./collections/Weapons/Weapons";
|
import { Weapons } from "./collections/Weapons/Weapons";
|
||||||
import { WeaponsGroups } from "./collections/WeaponsGroups/WeaponsGroups";
|
import { WeaponsGroups } from "./collections/WeaponsGroups/WeaponsGroups";
|
||||||
import { WeaponsThumbnails } from "./collections/WeaponsThumbnails/WeaponsThumbnails";
|
import { WeaponsThumbnails } from "./collections/WeaponsThumbnails/WeaponsThumbnails";
|
||||||
|
import { Wordings } from "./collections/Wordings/Wordings";
|
||||||
import { Icon } from "./components/Icon";
|
import { Icon } from "./components/Icon";
|
||||||
import { Logo } from "./components/Logo";
|
import { Logo } from "./components/Logo";
|
||||||
import { Collections } from "./constants";
|
import { Collections } from "./constants";
|
||||||
@ -70,6 +71,7 @@ export default buildConfig({
|
|||||||
Tags,
|
Tags,
|
||||||
TagsGroups,
|
TagsGroups,
|
||||||
Images,
|
Images,
|
||||||
|
Wordings
|
||||||
],
|
],
|
||||||
db: mongooseAdapter({
|
db: mongooseAdapter({
|
||||||
url: process.env.MONGODB_URI ?? "mongodb://mongo:27017/payload",
|
url: process.env.MONGODB_URI ?? "mongodb://mongo:27017/payload",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user