mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-10 19:14:16 +00:00
139 lines
3.4 KiB
JavaScript
Executable File
139 lines
3.4 KiB
JavaScript
Executable File
async function composeSettingsByGroups() {
|
|
console.time("load settings")
|
|
|
|
/* @vite-ignore */
|
|
let _settings = import.meta.glob("/constants/settings/*/index.jsx")
|
|
|
|
_settings = Object.entries(_settings).map(([route, moduleFile]) => {
|
|
const path = route.split("/").slice(-2)
|
|
const name = path[0]
|
|
|
|
if (name === "components" || name === "index") {
|
|
return null
|
|
}
|
|
|
|
return moduleFile
|
|
})
|
|
|
|
_settings = _settings.filter((moduleFile) => moduleFile)
|
|
|
|
_settings = await Promise.all(_settings.map((moduleFile) => moduleFile()))
|
|
|
|
_settings = _settings.map((moduleFile) => {
|
|
return moduleFile.default || moduleFile
|
|
})
|
|
|
|
_settings = _settings.sort((a, b) => {
|
|
if (a.group === "bottom") {
|
|
return 1
|
|
}
|
|
|
|
if (b.group === "bottom") {
|
|
return -1
|
|
}
|
|
|
|
return 0
|
|
})
|
|
|
|
_settings = _settings.reduce((acc, settingModule) => {
|
|
if (typeof acc[settingModule.group] !== "object") {
|
|
acc[settingModule.group] = []
|
|
}
|
|
|
|
acc[settingModule.group].push(settingModule)
|
|
|
|
return acc
|
|
}, {})
|
|
|
|
_settings = Object.entries(_settings).map(([group, groupModule]) => {
|
|
// filter setting by platform
|
|
groupModule = groupModule.map((subGroup) => {
|
|
if (Array.isArray(subGroup.settings)) {
|
|
subGroup.settings = subGroup.settings.filter((setting) => {
|
|
if (!app.isMobile && setting.desktop === false) {
|
|
return false
|
|
}
|
|
|
|
if (app.isMobile && setting.mobile === false) {
|
|
return false
|
|
}
|
|
|
|
return true
|
|
})
|
|
}
|
|
|
|
return subGroup
|
|
})
|
|
|
|
return {
|
|
group,
|
|
groupModule: groupModule
|
|
}
|
|
})
|
|
|
|
// order groups
|
|
_settings = _settings.map((group) => {
|
|
group.groupModule = group.groupModule.sort((a, b) => {
|
|
if (typeof a.order === undefined) {
|
|
// find index
|
|
a.order = group.groupModule.indexOf(a)
|
|
}
|
|
|
|
if (typeof b.order === undefined) {
|
|
// find index
|
|
b.order = group.groupModule.indexOf(b)
|
|
}
|
|
|
|
return a.order - b.order
|
|
})
|
|
|
|
return group
|
|
})
|
|
|
|
console.timeEnd("load settings")
|
|
|
|
return _settings
|
|
}
|
|
|
|
function composeTabsFromGroups(settingsGroups) {
|
|
return settingsGroups.reduce((acc, entry) => {
|
|
entry.groupModule.forEach((item) => {
|
|
if (item.id) {
|
|
acc[item.id] = item
|
|
}
|
|
})
|
|
|
|
return acc
|
|
}, {})
|
|
}
|
|
|
|
function composeGroupsFromSettingsTab(settings) {
|
|
if (!Array.isArray(settings)) {
|
|
console.error("settings is not an array")
|
|
return []
|
|
}
|
|
|
|
return settings.reduce((acc, setting) => {
|
|
if (setting.group) {
|
|
if (typeof acc[setting.group] === "undefined") {
|
|
acc[setting.group] = []
|
|
}
|
|
|
|
acc[setting.group].push(setting)
|
|
}
|
|
|
|
return acc
|
|
}, {})
|
|
}
|
|
|
|
const composedSettingsByGroups = await composeSettingsByGroups()
|
|
const composedTabs = composeTabsFromGroups(composedSettingsByGroups)
|
|
|
|
export {
|
|
composedSettingsByGroups,
|
|
composedTabs,
|
|
|
|
composeSettingsByGroups,
|
|
composeTabsFromGroups,
|
|
composeGroupsFromSettingsTab,
|
|
} |