mirror of
https://github.com/immich-app/immich.git
synced 2026-06-12 19:11:52 -07:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8de420493e |
@@ -163,19 +163,26 @@
|
||||
"description": "Filter by distance to a coordinate",
|
||||
"properties": {
|
||||
"latitude": {
|
||||
"type": "string",
|
||||
"type": "number",
|
||||
"title": "Latitude",
|
||||
"description": "GPS latitude of a coordinate which the asset must be close to"
|
||||
"description": "GPS latitude of a coordinate which the asset must be close to",
|
||||
"minimum": -90,
|
||||
"maximum": 90,
|
||||
"precision": 0.00001
|
||||
},
|
||||
"longitude": {
|
||||
"type": "string",
|
||||
"type": "number",
|
||||
"title": "Longitude",
|
||||
"description": "GPS longitude of a coordinate which the asset must be close to"
|
||||
"description": "GPS longitude of a coordinate which the asset must be close to",
|
||||
"minimum": -180,
|
||||
"maximum": 180,
|
||||
"precision": 0.00001
|
||||
},
|
||||
"radius": {
|
||||
"type": "number",
|
||||
"title": "Maximum distance",
|
||||
"description": "How close in kilometres the asset must be to the given point"
|
||||
"description": "How close in kilometres the asset must be to the given point",
|
||||
"minimum": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ export const assetLocationFilter = () => {
|
||||
WorkflowType.AssetV1,
|
||||
{
|
||||
region?: { country?: string; state?: string; city?: string };
|
||||
coordinate?: { latitude?: string; longitude?: string; radius?: number };
|
||||
coordinate?: { latitude?: number; longitude?: number; radius?: number };
|
||||
}
|
||||
>(({ config, data }) => {
|
||||
if (
|
||||
@@ -66,10 +66,10 @@ export const assetLocationFilter = () => {
|
||||
return { workflow: { continue: false } };
|
||||
}
|
||||
|
||||
const configLat = Number.parseFloat(config.coordinate?.latitude ?? '');
|
||||
const configLon = Number.parseFloat(config.coordinate?.longitude ?? '');
|
||||
const configLat = config.coordinate?.latitude;
|
||||
const configLon = config.coordinate?.longitude;
|
||||
|
||||
if (Number.isNaN(configLat) || Number.isNaN(configLat)) {
|
||||
if (configLat === undefined || configLon === undefined) {
|
||||
return { workflow: { continue: true } };
|
||||
}
|
||||
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
import { createZodDto } from 'nestjs-zod';
|
||||
import z from 'zod';
|
||||
|
||||
export const JsonSchemaTypeSchema = z
|
||||
.enum(['string', 'number', 'integer', 'boolean', 'object'])
|
||||
.meta({ id: 'JsonSchemaType' });
|
||||
export const JsonSchemaTypeSchema = z.enum(['string', 'number', 'boolean', 'object']).meta({ id: 'JsonSchemaType' });
|
||||
|
||||
const JsonSchemaPropertySchema = z
|
||||
.object({
|
||||
@@ -12,6 +10,9 @@ const JsonSchemaPropertySchema = z
|
||||
description: z.string().describe('Description'),
|
||||
default: z.any().optional().describe('Default value'),
|
||||
enum: z.array(z.string()).optional().describe('Valid choices for enum types'),
|
||||
minimum: z.number().optional().describe('Minimum value for number types'),
|
||||
maximum: z.number().optional().describe('Maximum value for number types'),
|
||||
precision: z.number().default(1).optional().describe('Smallest interval (granularity) for number types'),
|
||||
array: z.boolean().optional().describe('Type is an array type'),
|
||||
required: z.array(z.string()).optional().describe('A list of required properties'),
|
||||
uiHint: z.string().optional(),
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
</Field>
|
||||
{:else if schema.type === 'number'}
|
||||
<Field {label} {description}>
|
||||
<NumberInput bind:value={getNumber, setValue} />
|
||||
<NumberInput bind:value={getNumber, setValue} step={schema.precision} min={schema.minimum} max={schema.maximum} />
|
||||
</Field>
|
||||
{:else if schema.type === 'string'}
|
||||
<Field {label} {description}>
|
||||
|
||||
@@ -84,7 +84,7 @@ export type SearchFilter = {
|
||||
rating?: number | null;
|
||||
};
|
||||
|
||||
export type JSONSchemaType = 'string' | 'number' | 'integer' | 'boolean' | 'object';
|
||||
export type JSONSchemaType = 'string' | 'number' | 'boolean' | 'object';
|
||||
|
||||
export type JSONSchemaProperty = {
|
||||
type: JSONSchemaType;
|
||||
@@ -93,6 +93,9 @@ export type JSONSchemaProperty = {
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
default?: any;
|
||||
enum?: string[];
|
||||
minimum?: number;
|
||||
maximum?: number;
|
||||
precision?: number;
|
||||
array?: boolean;
|
||||
properties?: Record<string, JSONSchemaProperty>;
|
||||
required?: string[];
|
||||
|
||||
@@ -46,20 +46,6 @@ describe(getWorkflowDefaultConfig.name, () => {
|
||||
).toEqual({ test: false });
|
||||
});
|
||||
|
||||
it('should default to 0 (integer)', () => {
|
||||
expect(
|
||||
getWorkflowDefaultConfig({
|
||||
type: 'object',
|
||||
properties: {
|
||||
test: {
|
||||
type: 'integer',
|
||||
},
|
||||
},
|
||||
required: ['test'],
|
||||
}),
|
||||
).toEqual({ test: 0 });
|
||||
});
|
||||
|
||||
it('should default to 0 (number)', () => {
|
||||
expect(
|
||||
getWorkflowDefaultConfig({
|
||||
|
||||
@@ -64,7 +64,6 @@ export const getWorkflowDefaultConfig = (schema: JSONSchemaProperty) => {
|
||||
break;
|
||||
}
|
||||
|
||||
case 'integer':
|
||||
case 'number': {
|
||||
config[key] = 0;
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user