Skip to content

Commit

Permalink
feat: add generic parameters to application to make it easier to extend
Browse files Browse the repository at this point in the history
  • Loading branch information
simonseyock committed May 23, 2024
1 parent 98c0940 commit 82b0928
Showing 1 changed file with 35 additions and 18 deletions.
53 changes: 35 additions & 18 deletions src/model/Application.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,13 @@ export interface DefaultApplicationToolConfig {
config: any;
}

export interface DefaultApplicationLayerConfig {
export interface DefaultApplicationLayerConfig<
ClientConfig extends DefaultLayerClientConfig = DefaultLayerClientConfig,
SourceConfig extends DefaultLayerSourceConfig = DefaultLayerSourceConfig
> {
layerId: number;
clientConfig?: DefaultLayerClientConfig;
sourceConfig?: DefaultLayerSourceConfig;
clientConfig?: ClientConfig;
sourceConfig?: SourceConfig;
}

export interface DefaultLayerTree {
Expand All @@ -50,30 +53,44 @@ export interface DefaultLegalConfig {
privacy?: string;
}

export interface DefaultApplicationClientConfig {
mapView: DefaultMapView;
export interface DefaultApplicationClientConfig<
MapView extends DefaultMapView = DefaultMapView,
LegalConfig extends DefaultLegalConfig = DefaultLegalConfig,
ApplicationTheme extends DefaultApplicationTheme = DefaultApplicationTheme
> {
mapView: MapView;
description?: string;
legal?: DefaultLegalConfig;
theme?: DefaultApplicationTheme;
legal?: LegalConfig;
theme?: ApplicationTheme;
defaultLanguage?: string;
}

export interface ApplicationArgs extends BaseEntityArgs {
export interface ApplicationArgs<
ClientConfig extends DefaultApplicationClientConfig = DefaultApplicationClientConfig,
LayerTree extends DefaultLayerTree = DefaultLayerTree,
LayerConfig extends DefaultApplicationLayerConfig = DefaultApplicationLayerConfig,
ToolConfig extends DefaultApplicationToolConfig = DefaultApplicationToolConfig
> extends BaseEntityArgs {
name?: string;
stateOnly?: boolean;
clientConfig?: DefaultApplicationClientConfig;
layerTree?: DefaultLayerTree;
layerConfig?: DefaultApplicationLayerConfig[];
toolConfig?: DefaultApplicationToolConfig[];
clientConfig?: ClientConfig;
layerTree?: LayerTree;
layerConfig?: LayerConfig[];
toolConfig?: ToolConfig[];
}

export default class Application extends BaseEntity {
export default class Application<
ClientConfig extends DefaultApplicationClientConfig = DefaultApplicationClientConfig,
LayerTree extends DefaultLayerTree = DefaultLayerTree,
LayerConfig extends DefaultApplicationLayerConfig = DefaultApplicationLayerConfig,
ToolConfig extends DefaultApplicationToolConfig = DefaultApplicationToolConfig
> extends BaseEntity {
name?: string;
stateOnly?: boolean;
clientConfig?: DefaultApplicationClientConfig;
layerTree?: DefaultLayerTree;
layerConfig?: DefaultApplicationLayerConfig[];
toolConfig?: DefaultApplicationToolConfig[];
clientConfig?: ClientConfig;
layerTree?: LayerTree;
layerConfig?: LayerConfig[];
toolConfig?: ToolConfig[];

constructor({
id,
Expand All @@ -85,7 +102,7 @@ export default class Application extends BaseEntity {
layerTree,
layerConfig,
toolConfig
}: ApplicationArgs) {
}: ApplicationArgs<ClientConfig, LayerTree, LayerConfig, ToolConfig>) {
super({id, created, modified});

this.name = name;
Expand Down

0 comments on commit 82b0928

Please sign in to comment.