Add fmPackageExists directive
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good

This commit is contained in:
Willem Dantuma 2022-03-16 14:20:28 +01:00
parent 521b882798
commit 713af307cd
7 changed files with 59 additions and 3 deletions

View File

@ -12,6 +12,9 @@ export const INITUSERSUCCESS = '[AppCommon] InitUserSuccess';
export const INITUSERPACKAGES = '[AppCommon] InitUserPackages';
export const INITUSERPACKAGESSUCCESS = '[AppCommon] InitUserPackagesSuccess';
export const INITPACKAGES = '[AppCommon] InitPackages';
export const INITPACKAGESSUCCESS = '[AppCommon] InitPackagesSuccess';
export const INITUSERSETTINGSROOT = '[AppCommon] InitUserSettingsRoot';
export const INITUSERSETTINGSROOTSUCCESS = '[AppCommon] InitUserSettingsRootSuccess';
@ -102,6 +105,18 @@ export class InitUserPackagesSuccess implements Action {
constructor(public items:IItem[] ) { }
}
export class InitPackages implements Action {
readonly type = INITPACKAGES;
constructor() {}
}
export class InitPackagesSuccess implements Action {
readonly type = INITPACKAGESSUCCESS;
constructor(public items:IItem[] ) { }
}
export class InitUserSettingsRoot implements Action {
readonly type = INITUSERSETTINGSROOT;
@ -381,6 +396,8 @@ export type Actions = OpenModal
| SetMenuVisible
| InitUserPackages
| InitUserPackagesSuccess
| InitPackages
| InitPackagesSuccess
| InitUserSettingsRoot
| InitUserSettingsRootSuccess
| ToggleAccountMenu

View File

@ -32,6 +32,7 @@ import { TimespanComponent } from './components/timespan/timespan.component';
import { TagInputComponent } from './components/tag-input/tag-input.component';
import { MenuBackgroundComponent } from './components/menu-background/menu-background.component';
import { HasPackageDirective} from './components/has-package/has-package.directive';
import { PackageExistsDirective} from './components/package-exists/package-exists.directive';
import { HasClaimDirective} from './components/has-claim/has-claim.directive';
import { UserMenuComponent} from './components/user-menu/user-menu.component';
import { ThumbnailComponent } from './components/thumbnail/thumbnail.component';
@ -82,6 +83,7 @@ export {
UserMenuComponent,
ThumbnailComponent,
HasPackageDirective,
PackageExistsDirective,
HasClaimDirective,
Alert,
IEventMessage,
@ -144,6 +146,7 @@ export {
SessionClearedComponent,
MenuBackgroundComponent,
HasPackageDirective,
PackageExistsDirective,
HasClaimDirective,
UserMenuComponent,
GradientComponent,
@ -174,6 +177,7 @@ export {
SessionClearedComponent,
MenuBackgroundComponent,
HasPackageDirective,
PackageExistsDirective,
HasClaimDirective,
UserMenuComponent,
GradientComponent,

View File

@ -62,6 +62,15 @@ export class AppCommonEffects {
)
})
));
initPackages$ = createEffect(() => this.actions$.pipe(
ofType(appCommonActions.INITPACKAGES),
switchMap(() => {
return this.itemService$.getItemList('vnd.farmmaps.itemtype.package.template').pipe(
switchMap((items) => of(new appCommonActions.InitPackagesSuccess(items))),
catchError(error => of(new appCommonActions.Fail(error)))
)
})
));
userPackagesChanged$ = createEffect(() => this.actions$.pipe(
ofType(appCommonActions.ITEMCHANGEDEVENT),
@ -99,7 +108,7 @@ export class AppCommonEffects {
initUserSuccess$ = createEffect(() => this.actions$.pipe(
ofType(appCommonActions.INITUSERSUCCESS),
switchMap(() => {
return [new appCommonActions.InitRoot(),new appCommonActions.InitUserPackages(),new appCommonActions.InitUserSettingsRoot()];
return [new appCommonActions.InitRoot(),new appCommonActions.InitUserPackages(),new appCommonActions.InitPackages(),new appCommonActions.InitUserSettingsRoot()];
}
)));

View File

@ -9,3 +9,8 @@ export interface IPackage {
export interface IPackages {
[id: string]: IPackage[];
}
export interface IPackageMap {
[id: string]: IPackage;
}

View File

@ -2,7 +2,7 @@ import { tassign } from 'tassign';
import { IItemTypes} from '../models/item.types';
import { IListItem } from '../models/list.item';
import { IUser } from '../models/user';
import { IPackage,IPackages} from '../models/package';
import { IPackage,IPackageMap,IPackages} from '../models/package';
import * as appCommonActions from '../actions/app-common.actions';
import { createSelector, createFeatureSelector, ActionReducerMap } from '@ngrx/store';
@ -20,6 +20,7 @@ export interface State {
routeLoading:boolean,
menuVisible: boolean,
userPackages: IPackages,
packages: IPackageMap,
userSettingsRoot: IItem,
accountMenuVisible: boolean,
appMenuVisible: boolean,
@ -40,6 +41,7 @@ export const initialState: State = {
routeLoading: false,
menuVisible: false,
userPackages: {},
packages: {},
userSettingsRoot: null,
accountMenuVisible: false,
appMenuVisible: false,
@ -140,6 +142,15 @@ export function reducer(state = initialState, action: appCommonActions.Actions )
return tassign(state,{userPackages:packages});
}
case appCommonActions.INITPACKAGESSUCCESS:{
let a = action as appCommonActions.InitPackagesSuccess;
let packages = {}
a.items.forEach((item) => {
packages[item.data.id] = item.data;
});
return tassign(state,{packages:packages});
}
case appCommonActions.INITUSERSETTINGSROOTSUCCESS:{
let a = action as appCommonActions.InitUserSettingsRootSuccess;
return tassign(state, { userSettingsRoot : a.item });
@ -187,6 +198,7 @@ export const getRouteLoading = (state: State) => state.routeLoading;
export const getMenuVisible = (state: State) => state.menuVisible;
export const getUser = (state: State) => state.user;
export const getUserPackages = (state: State) => state.userPackages;
export const getPackages = (state: State) => state.packages;
export const getUserSettingsRoot = (state: State) => state.userSettingsRoot;
export const getAccountMenuVisible = (state: State) => state.accountMenuVisible;
export const getAppMenuVisible = (state: State) => state.appMenuVisible;
@ -207,6 +219,7 @@ export const selectGetRouteLoading = createSelector(selectAppCommonState, getRou
export const SelectGetMenuVisible = createSelector(selectAppCommonState,getMenuVisible);
export const SelectGetUser = createSelector(selectAppCommonState,getUser);
export const SelectGetUserPackages = createSelector(selectAppCommonState,getUserPackages);
export const SelectGetPackages = createSelector(selectAppCommonState,getPackages);
export const SelectGetValidUserPackages = createSelector(SelectGetUserPackages, (packageMap) => {
return getValidPackages(packageMap);
});

View File

@ -14,10 +14,14 @@ import {Observable} from 'rxjs';
})
export class PackageService {
private userPackages: { [key: string]: IPackage } = {};
private packages: { [key: string]: IPackage } = {};
constructor(private store$: Store<appCommonReducer.State>, public httpClient: HttpClient, public appConfig: AppConfig) {
store$.select(appCommonReducer.SelectGetValidUserPackages).subscribe((packages) => {
this.userPackages = packages;
});
store$.select(appCommonReducer.SelectGetPackages).subscribe((packages) => {
this.packages = packages;
});
}
@ -27,6 +31,10 @@ export class PackageService {
}
hasPackage(id: string): boolean {
return id in this.userPackages;
}
packageExists(id: string): boolean {
return id in this.packages;
}

View File

@ -2,7 +2,7 @@
<div class="row">
<fm-gradient-select [gradientItems]="gradientItems|async" [showLabel]="false" [showAdd]="true"></fm-gradient-select>
</div>
<div class="row mt-3">
<div class="row mt-3" *fmPackageExists="'vnd.farmmaps.itemtype.package.dacom'">
<button class="btn btn-primary" (click)="onTest($event)">Test</button>
</div>
</div>