* Add XState and naive ActionBar
* Add basic dialog and combobox
* Selectable commands in command bar
* Add a few (broken) file actions
* Home commands
* Add subcommand descriptions, cleanup on navigate
* Refactor: move command creation and types to lib
* Refactor to allow any machine to add commands
* Add auth to command bar, add ability to hide cmds
* Refactor: consolidate theme utilities
* Add settings as machine and command set
* Fix: type tweaks
* Fix: only allow auth to navigate from signin
* Remove zustand-powered settings
* Fix: remove zustand settings from App
* Fix: browser infinite redirect
* Feature: allow commands to be hidden per-platform
* Fix: tsc errors
* Fix: hide default project directory from cmd bar
* Polish: transitions, css tweaks
* Feature: label current value in options settings
* Fix broken debug panel UI
* Refactor: move settings toasts to actions
* Tweak: css rounding
* Fix: set default directory recursion and reload 🐞
* Refactor: move machines to their own directory
* Fix formatting
* @Irev-Dev clean-up catches, import cleanup
65 lines
1.7 KiB
TypeScript
65 lines
1.7 KiB
TypeScript
import {
|
|
faArrowDown,
|
|
faArrowUp,
|
|
faCircleDot,
|
|
} from '@fortawesome/free-solid-svg-icons'
|
|
import { ProjectWithEntryPointMetadata } from '../Router'
|
|
|
|
const DESC = ':desc'
|
|
|
|
export function getSortIcon(currentSort: string, newSort: string) {
|
|
if (currentSort === newSort) {
|
|
return faArrowUp
|
|
} else if (currentSort === newSort + DESC) {
|
|
return faArrowDown
|
|
}
|
|
return faCircleDot
|
|
}
|
|
|
|
export function getNextSearchParams(currentSort: string, newSort: string) {
|
|
if (currentSort === null || !currentSort)
|
|
return { sort_by: newSort + (newSort !== 'modified' ? DESC : '') }
|
|
if (currentSort.includes(newSort) && !currentSort.includes(DESC))
|
|
return { sort_by: '' }
|
|
return {
|
|
sort_by: newSort + (currentSort.includes(DESC) ? '' : DESC),
|
|
}
|
|
}
|
|
|
|
export function getSortFunction(sortBy: string) {
|
|
const sortByName = (
|
|
a: ProjectWithEntryPointMetadata,
|
|
b: ProjectWithEntryPointMetadata
|
|
) => {
|
|
if (a.name && b.name) {
|
|
return sortBy.includes('desc')
|
|
? a.name.localeCompare(b.name)
|
|
: b.name.localeCompare(a.name)
|
|
}
|
|
return 0
|
|
}
|
|
|
|
const sortByModified = (
|
|
a: ProjectWithEntryPointMetadata,
|
|
b: ProjectWithEntryPointMetadata
|
|
) => {
|
|
if (
|
|
a.entrypoint_metadata?.modifiedAt &&
|
|
b.entrypoint_metadata?.modifiedAt
|
|
) {
|
|
return !sortBy || sortBy.includes('desc')
|
|
? b.entrypoint_metadata.modifiedAt.getTime() -
|
|
a.entrypoint_metadata.modifiedAt.getTime()
|
|
: a.entrypoint_metadata.modifiedAt.getTime() -
|
|
b.entrypoint_metadata.modifiedAt.getTime()
|
|
}
|
|
return 0
|
|
}
|
|
|
|
if (sortBy?.includes('name')) {
|
|
return sortByName
|
|
} else {
|
|
return sortByModified
|
|
}
|
|
}
|