Skip to content

Commit

Permalink
Merge pull request #1013 from riganti/feature/js-metadata-api
Browse files Browse the repository at this point in the history
Added helper functions for working with type metadata
  • Loading branch information
acizmarik committed May 12, 2021
2 parents 9425fa6 + 085bc18 commit 305bc98
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 0 deletions.
7 changes: 7 additions & 0 deletions src/DotVVM.Framework/Resources/Scripts/dotvvm-root.ts
Expand Up @@ -25,6 +25,7 @@ import * as viewModuleManager from './viewModules/viewModuleManager'
import { notifyModuleLoaded } from './postback/resourceLoader'
import { logError, logWarning, logInfo, logInfoVerbose, level, logPostBackScriptError } from "./utils/logging"
import { orderBy, orderByDesc } from './collections/sortingHelper'
import * as metadataHelper from './metadata/metadataHelper'
import * as arrayHelper from './collections/arrayHelper'
import * as stringHelper from './utils/stringHelper'

Expand Down Expand Up @@ -99,6 +100,12 @@ const dotvvmExports = {
parseDate,
deserialize
},
metadata: {
getTypeId: metadataHelper.getTypeId,
getTypeMetadata: metadataHelper.getTypeMetadata,
getEnumMetadata: metadataHelper.getEnumMetadata,
getEnumValue: metadataHelper.getEnumValue
},
viewModules: {
registerOne: viewModuleManager.registerViewModule,
init: viewModuleManager.initViewModule,
Expand Down
28 changes: 28 additions & 0 deletions src/DotVVM.Framework/Resources/Scripts/metadata/metadataHelper.ts
@@ -0,0 +1,28 @@
import { getTypeInfo } from "./typeMap";

export function getTypeId(viewModel: object): string | undefined {
return ko.unwrap((viewModel as any).$type);
}

export function getTypeMetadata(typeId: string): TypeMetadata {
return getTypeInfo(typeId);
}

export function getEnumMetadata(enumMetadataId: string): EnumTypeMetadata {
let metadata = getTypeInfo(enumMetadataId);
if (metadata.type !== "enum") {
throw new Error("Expected enum, but received object");
}

return metadata as EnumTypeMetadata;
}

export function getEnumValue(identifier: string | number, enumMetadataId: string): number | undefined {
let metadata = getEnumMetadata(enumMetadataId);
if (typeof identifier === "string") {
return metadata.values[identifier];
}
else {
return identifier;
}
}

0 comments on commit 305bc98

Please sign in to comment.