This commit is contained in:
2023-07-06 16:35:56 +04:00
parent 849ef57227
commit 5e309ea02f
12 changed files with 82 additions and 9739 deletions

View File

@@ -0,0 +1,166 @@
import directus from '~/lib/directus'
import all from '~/public/data.json'
function sluggify(str = '') {
return (
str
.toLocaleLowerCase()
.normalize('NFKC')
.trim()
//
.split('.')
.join(' ')
.split('(')
.join('')
.split(')')
.join('')
.split('|')
.join(' ')
.trim()
.split(',')
.join('')
.split(' ')
.join('-')
.split('-/-')
.join('-')
.split(' &amp')
.join('')
.split('&')
.join('and')
.split('/')
.join('-')
.replace(/\-\-+/, '-')
.trim()
)
}
function sanitize(str = '') {
return (
str
//
.split(' &amp')
.join('')
.split(' / ')
.join('/')
.split('/')
.join(' / ')
.trim()
)
}
async function importCategories() {
all.results.map((one) => {
one.raw.marketplaceexhibitorcategory?.map(async (cat) => {
const name = sanitize(cat)
const slug = sluggify(name)
try {
await directus.items('categories').createOne({
slug,
name,
})
} catch (error) {}
})
})
}
async function importSubcategories() {
all.results.map((one) => {
one.raw.marketplaceexhibitorsubcategory?.map(async (cat) => {
const name = sanitize(cat)
const slug = sluggify(name)
try {
await directus.items('categories').createOne({
slug,
name,
})
} catch (error) {}
})
})
}
async function importCategoryStructure() {
const { data: categories } = await directus.items('categories').readByQuery({ limit: -1 })
all.results.map((one) => {
one.raw.marketplaceexhibitorcategorysubcategory?.map(async (cat) => {
const [parentTitle, catTitle] = cat.split('|')
const catSlug = sluggify(catTitle)
const parentSlug = sluggify(parentTitle)
if (parentSlug) {
try {
const category = categories.find((c) => catSlug === c.slug)
const parent = categories.find((c) => parentSlug === c.slug)
await directus.items('categories').updateOne(category.id, {
parent_id: parent.id,
})
} catch (error) {}
}
})
})
}
async function importVendors() {
const { data: categories } = await directus.items('categories').readByQuery({ limit: -1 })
return Promise.all(
all.results.map(async (one) => {
const name = sanitize(one.raw.name)
let slug = sluggify(name)
const {
data: [existingVendor],
} = await directus.items('vendors').readByQuery({
fields: ['slug'],
limit: -1,
filter: {
slug: {
_eq: slug,
},
},
})
let i = 1
while (existingVendor?.slug === slug) {
slug = sluggify(name) + '-' + i++
}
const categoryIds = new Set(
one.raw.marketplaceexhibitorcategory
?.map((t) => sluggify(sanitize(t)))
.map((s) => categories.filter((t) => !t.parent_id).find((t) => s === t.slug)?.id)
.filter((s) => !!s)
)
const vendor = {
slug,
name,
status: 'published',
description: one.raw?.description,
address_line_1: one.raw?.addressline1,
address_line_2: one.raw?.addressline2,
city: one.raw?.city,
state: one.raw?.state,
country: one.raw?.country,
website: one.raw?.website,
}
try {
const res = await directus.items('vendors').createOne(vendor)
categoryIds.forEach(async (cid) => {
await directus.items('vendors_categories').createOne({ vendors_id: res.id, categories_id: cid })
})
} catch (error) {}
})
)
}
export default function Home() {
// importCategories()
// importSubcategories()
// importCategoryStructure()
// importVendors()
return (
<main>
<h1>Import {new Date().toISOString()}</h1>
{/* <pre>{JSON.stringify(res, null, 2)} </pre> */}
</main>
)
}

40
frontend/src/theme.js Normal file
View File

@@ -0,0 +1,40 @@
import { extendTheme } from '@chakra-ui/react'
import { defineStyle, defineStyleConfig } from '@chakra-ui/react'
const pagination = defineStyle({
whiteSpace: 'nowrap',
bg: 'transparent',
gap: 3,
paddingInlineStart: 3,
paddingInlineEnd: 3,
lineHeight: 10,
borderRadius: 'md',
border: '1px solid',
borderColor: 'inherit',
width: '100%',
_hover: {
textDecor: 'none',
},
'&.current': {
bg: 'var(--chakra-colors-gray-300)',
border: '1px solid transparent',
},
_dark: {
bg: 'var(--chakra-colors-gray-900)',
'&.current': {
bg: 'var(--chakra-colors-gray-700)',
},
},
})
const linkTheme = defineStyleConfig({
variants: { pagination },
})
const theme = extendTheme({
components: {
Link: linkTheme,
},
})
export default theme