first commit

This commit is contained in:
Peter Krzyzek 2025-02-25 15:03:17 -06:00
commit 0a45a1f5fb
20 changed files with 992 additions and 0 deletions

View file

@ -0,0 +1,64 @@
// utils/filter-task-fields.ts
import type { TaskResponse } from '../types/clickup';
type FieldSelector = Array<string | NestedField>;
type NestedField = {
field: string;
subfields?: FieldSelector;
};
export function filterTaskFields(
task: TaskResponse,
fields: FieldSelector
): Partial<TaskResponse> {
return fields.reduce((acc, selector) => {
if (typeof selector === 'string') {
handleStringSelector(acc, task, selector);
} else if (selector.subfields) {
handleNestedSelector(acc, task, selector);
}
return acc;
}, {} as Partial<TaskResponse>);
}
function handleStringSelector(
acc: Partial<TaskResponse>,
task: TaskResponse,
selector: string
) {
const [root, ...nested] = selector.split('.');
if (task[root as keyof TaskResponse] !== undefined) {
if (nested.length > 0) {
acc[root as keyof TaskResponse] = processNestedField(
task[root as keyof TaskResponse],
nested.join('.')
);
} else {
acc[root as keyof TaskResponse] = task[root as keyof TaskResponse];
}
}
}
function handleNestedSelector(
acc: Partial<TaskResponse>,
task: TaskResponse,
selector: NestedField
) {
const value = task[selector.field as keyof TaskResponse];
if (value && typeof value === 'object') {
acc[selector.field as keyof TaskResponse] = Array.isArray(value)
? value.map(item => filterTaskFields(item as TaskResponse, selector.subfields!))
: filterTaskFields(value as TaskResponse, selector.subfields!);
}
}
function processNestedField(value: any, nestedPath: string): any {
const [current, ...remaining] = nestedPath.split('.');
if (value[current] === undefined) return undefined;
return remaining.length > 0
? processNestedField(value[current], remaining.join('.'))
: value[current];
}

View file

@ -0,0 +1,10 @@
summary: Filter Task Fields
description: ''
lock: ''
kind: script
no_main_func: true
schema:
$schema: 'https://json-schema.org/draft/2020-12/schema'
type: object
properties: {}
required: []