``` ~/go/bin/sourcemapper -output ddb -jsurl https://media.dndbeyond.com/character-app/static/js/main.90aa78c5.js ```
204 lines
5.7 KiB
TypeScript
204 lines
5.7 KiB
TypeScript
import {
|
|
BaseInventoryContract,
|
|
Hack__BaseCharClass,
|
|
FeatDetailsContract,
|
|
RacialTraitContract,
|
|
ClassFeatureUtils,
|
|
ClassUtils,
|
|
Constants,
|
|
DataOriginRef,
|
|
DataOriginRefData,
|
|
DataOriginUtils,
|
|
FeatUtils,
|
|
ItemUtils,
|
|
RacialTraitUtils,
|
|
DataOrigin,
|
|
Spell,
|
|
SpellUtils,
|
|
ClassFeatureContract,
|
|
} from "@dndbeyond/character-rules-engine/es";
|
|
|
|
import { PaneIdentifierUtils } from "~/tools/js/Shared/utils";
|
|
|
|
import {
|
|
PaneComponentEnum,
|
|
PaneComponentInfo,
|
|
PaneComponentProperties,
|
|
PaneIdentifiers,
|
|
} from "../types";
|
|
|
|
// List any full width panes
|
|
const fullWidthPanes = [PaneComponentEnum.CHARACTER_MANAGE];
|
|
|
|
// Check to see if pane is in the list
|
|
const isFullWidthPane = (activeEntry: PaneComponentInfo | null) =>
|
|
activeEntry?.type && fullWidthPanes.includes(activeEntry.type);
|
|
|
|
// List any forced dark mode panes
|
|
const darkModePanes = [PaneComponentEnum.CHARACTER_MANAGE];
|
|
|
|
// Check to see if pane is in the list
|
|
const forceDarkMode = (activeEntry: PaneComponentInfo | null) =>
|
|
activeEntry?.type && darkModePanes.includes(activeEntry.type);
|
|
|
|
// Return optional pane props
|
|
export const getPaneProperties = (
|
|
activeEntry: PaneComponentInfo | null
|
|
): PaneComponentProperties => {
|
|
const props: PaneComponentProperties = {
|
|
isFullWidth: isFullWidthPane(activeEntry) ?? false,
|
|
forceDarkMode: forceDarkMode(activeEntry) ?? false,
|
|
};
|
|
|
|
return { ...props };
|
|
};
|
|
|
|
export function getSpellComponentInfo(spell: Spell): PaneComponentInfo {
|
|
let dataOrigin = SpellUtils.getDataOrigin(spell);
|
|
let dataOriginType = SpellUtils.getDataOriginType(spell);
|
|
|
|
let type: PaneComponentEnum = PaneComponentEnum.CHARACTER_SPELL_DETAIL;
|
|
let identifiers: PaneIdentifiers | null = null;
|
|
|
|
const mappingId = SpellUtils.getMappingId(spell);
|
|
if (mappingId !== null) {
|
|
if (dataOriginType === Constants.DataOriginTypeEnum.CLASS) {
|
|
type = PaneComponentEnum.CLASS_SPELL_DETAIL;
|
|
identifiers = PaneIdentifierUtils.generateClassSpell(
|
|
ClassUtils.getMappingId(dataOrigin.primary as Hack__BaseCharClass),
|
|
mappingId
|
|
);
|
|
} else {
|
|
identifiers = PaneIdentifierUtils.generateCharacterSpell(mappingId);
|
|
}
|
|
}
|
|
|
|
return {
|
|
type,
|
|
identifiers,
|
|
};
|
|
}
|
|
|
|
export function getDataOriginComponentInfo(
|
|
dataOrigin: DataOrigin
|
|
): PaneComponentInfo {
|
|
let type: PaneComponentEnum = PaneComponentEnum.ERROR_404;
|
|
let identifiers: PaneIdentifiers | null = null;
|
|
switch (dataOrigin.type) {
|
|
case Constants.DataOriginTypeEnum.ITEM:
|
|
type = PaneComponentEnum.ITEM_DETAIL;
|
|
identifiers = PaneIdentifierUtils.generateItem(
|
|
ItemUtils.getMappingId(dataOrigin.primary as BaseInventoryContract)
|
|
);
|
|
break;
|
|
|
|
case Constants.DataOriginTypeEnum.CLASS_FEATURE:
|
|
type = PaneComponentEnum.CLASS_FEATURE_DETAIL;
|
|
identifiers = PaneIdentifierUtils.generateClassFeature(
|
|
ClassFeatureUtils.getId(dataOrigin.primary as ClassFeatureContract),
|
|
ClassUtils.getMappingId(dataOrigin.parent as Hack__BaseCharClass)
|
|
);
|
|
break;
|
|
|
|
case Constants.DataOriginTypeEnum.RACE:
|
|
type = PaneComponentEnum.SPECIES_TRAIT_DETAIL;
|
|
identifiers = PaneIdentifierUtils.generateRacialTrait(
|
|
RacialTraitUtils.getId(dataOrigin.primary as RacialTraitContract)
|
|
);
|
|
break;
|
|
|
|
case Constants.DataOriginTypeEnum.FEAT:
|
|
type = PaneComponentEnum.FEAT_DETAIL;
|
|
identifiers = PaneIdentifierUtils.generateFeat(
|
|
FeatUtils.getId(dataOrigin.primary as FeatDetailsContract)
|
|
);
|
|
break;
|
|
|
|
case Constants.DataOriginTypeEnum.BACKGROUND:
|
|
type = PaneComponentEnum.BACKGROUND;
|
|
break;
|
|
|
|
case Constants.DataOriginTypeEnum.FEAT_LIST:
|
|
if (dataOrigin.parentType === Constants.DataOriginTypeEnum.BACKGROUND) {
|
|
type = PaneComponentEnum.BACKGROUND;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
// Not implemented
|
|
}
|
|
|
|
return {
|
|
type,
|
|
identifiers,
|
|
};
|
|
}
|
|
|
|
export function getDataOriginRefComponentInfo(
|
|
ref: DataOriginRef,
|
|
refData: DataOriginRefData
|
|
): PaneComponentInfo {
|
|
let type: PaneComponentEnum = PaneComponentEnum.ERROR_404;
|
|
let identifiers: PaneIdentifiers | null = null;
|
|
|
|
switch (ref.type) {
|
|
case Constants.DataOriginTypeEnum.ITEM: {
|
|
const primary = DataOriginUtils.getRefPrimary(ref, refData);
|
|
if (primary !== null) {
|
|
type = PaneComponentEnum.ITEM_DETAIL;
|
|
identifiers = PaneIdentifierUtils.generateItem(
|
|
ItemUtils.getMappingId(primary)
|
|
);
|
|
}
|
|
break;
|
|
}
|
|
|
|
case Constants.DataOriginTypeEnum.CLASS_FEATURE: {
|
|
const primary = DataOriginUtils.getRefPrimary(ref, refData);
|
|
const parent = DataOriginUtils.getRefParent(ref, refData);
|
|
if (primary !== null && parent !== null) {
|
|
type = PaneComponentEnum.CLASS_FEATURE_DETAIL;
|
|
identifiers = PaneIdentifierUtils.generateClassFeature(
|
|
ClassFeatureUtils.getId(primary),
|
|
ClassUtils.getMappingId(parent)
|
|
);
|
|
}
|
|
break;
|
|
}
|
|
|
|
case Constants.DataOriginTypeEnum.RACE: {
|
|
const primary = DataOriginUtils.getRefPrimary(ref, refData);
|
|
if (primary !== null) {
|
|
type = PaneComponentEnum.SPECIES_TRAIT_DETAIL;
|
|
identifiers = PaneIdentifierUtils.generateRacialTrait(
|
|
RacialTraitUtils.getId(primary)
|
|
);
|
|
}
|
|
break;
|
|
}
|
|
|
|
case Constants.DataOriginTypeEnum.FEAT: {
|
|
const primary = DataOriginUtils.getRefPrimary(ref, refData);
|
|
if (primary !== null) {
|
|
type = PaneComponentEnum.FEAT_DETAIL;
|
|
identifiers = PaneIdentifierUtils.generateFeat(
|
|
FeatUtils.getId(primary)
|
|
);
|
|
}
|
|
break;
|
|
}
|
|
|
|
case Constants.DataOriginTypeEnum.BACKGROUND:
|
|
type = PaneComponentEnum.BACKGROUND;
|
|
break;
|
|
|
|
default:
|
|
// Not implemented
|
|
}
|
|
|
|
return {
|
|
type,
|
|
identifiers,
|
|
};
|
|
}
|