Compare commits

..

15 Commits
v0.2.1 ... main

13 changed files with 1985 additions and 1142 deletions

16
.island/release.bash Executable file
View File

@ -0,0 +1,16 @@
#!/bin/bash
version_file="version.txt"
new_version=$(cat $version_file)
sed -i "s|\"version\":.*\".*\"|\"version\":\"$new_version\"|" package.json
if grep -q "dev" "$version_file"; then
# update all dependency
pnpm install
pnpm run update_packages
else
# in case of release ==> can not do it automatically ...
echo not implemented
fi

View File

@ -1,6 +1,6 @@
{
"name": "@kangaroo-and-rabbit/kar-cw",
"version": "0.2.1",
"version": "0.4.1",
"sideEffects": false,
"scripts": {
"dev": "ng build kar-cw --watch --configuration development",
@ -10,26 +10,26 @@
"lint": "ng lint",
"style": "prettier --write .",
"update_packages": "ncu --upgrade",
"install_dependency": "pnpm install"
"install_dependency": "pnpm install --force"
},
"peerDependencies": {
"@angular/common": "^17.3.5",
"@angular/compiler": "^17.3.5",
"@angular/core": "^17.3.5",
"@angular/forms": "^17.3.5",
"@angular/platform-browser": "^17.3.5",
"@angular/platform-browser-dynamic": "^17.3.5",
"@angular/router": "^17.3.5",
"rxjs": "~7.8.0",
"zone.js": "~0.14.3"
"@angular/common": "^18.0.0",
"@angular/compiler": "^18.0.0",
"@angular/core": "^18.0.0",
"@angular/forms": "^18.0.0",
"@angular/platform-browser": "^18.0.0",
"@angular/platform-browser-dynamic": "^18.0.0",
"@angular/router": "^18.0.0",
"rxjs": "~7.8.1",
"zone.js": "~0.14.5"
},
"dependencies": {
"tslib": "^2.6.2"
},
"devDependencies": {
"@angular-devkit/build-angular": "^17.3.5",
"@angular/cli": "^17.3.5",
"@angular/compiler-cli": "^17.3.5",
"@angular-devkit/build-angular": "^18.0.1",
"@angular/cli": "^18.0.1",
"@angular/compiler-cli": "^18.0.0",
"@types/jasmine": "~5.1.4",
"jasmine-core": "~5.1.2",
"karma": "~6.4.3",
@ -37,9 +37,9 @@
"karma-coverage": "~2.2.1",
"karma-jasmine": "~5.1.0",
"karma-jasmine-html-reporter": "~2.1.0",
"ng-packagr": "^17.3.3",
"ng-packagr": "^18.0.0",
"typescript": "~5.4.5",
"npm-check-updates": "^16.14.18"
"npm-check-updates": "^16.14.20"
},
"maintainers": [
{

2922
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -22,7 +22,7 @@ export class AsyncActionStatusComponent {
@Input() value: AsyncActionState = AsyncActionState.IDLE;
public getImage(): string {
switch(this.value) {
switch (this.value) {
case AsyncActionState.IDLE:
return '';
case AsyncActionState.LOADING:

View File

@ -1,6 +1,7 @@
<div class="elem-checkbox">
<input
type="checkbox"
[disabled]="isDisable"
[checked]="value"
(change)="onChange($event.target.checked)" />
{{comment}}

View File

@ -11,18 +11,20 @@ import { Component, EventEmitter, Input, Output } from '@angular/core';
styleUrls: ['checkbox.less'],
})
export class CheckboxComponent {
/// Checkbox value
@Input() isDisable: boolean = false;
/// Checkbox value
@Input() value: boolean = false;
/// Description of the checkbox
@Input() comment: string = "";
/// event when change the value of the password
@Output() changeValue: EventEmitter<boolean> = new EventEmitter();
@Output() changeValue: EventEmitter<boolean> = new EventEmitter();
/**
* When input value change, need update the display and change the internal value.
* @param newValue New value set on the password
*/
onChange(newValue: boolean): void {
onChange(newValue: boolean): void {
this.value = newValue;
this.changeValue.emit(this.value);
}

View File

@ -1,17 +1,24 @@
import { AsyncActionState, AsyncActionStatusComponent } from './async-action-status/async-status-component';
import { BurgerPropertyComponent } from './burger-property/burger-property';
import { CheckboxComponent } from './checkbox/checkbox';
import { EntryNumberComponent } from './entry-number/entry-number';
import { EntryValidatorComponent } from './entry-validator/entry-validator';
import { EntryComponent } from './entry/entry';
import { ErrorMessageStateComponent } from './error-message-state/error-message-state';
import { ErrorComponent } from './error/error';
import { PasswordEntryComponent } from './password-entry/password-entry';
import { PopInComponent } from './popin/popin';
import { RenderFormComponent } from './render-settings/render-form';
import { RenderSettingsComponent } from './render-settings/render-settings';
import { SpinnerComponent } from './spinner/spinner';
import { EventOnMenu, TopMenuComponent } from './top-menu/top-menu';
import { UploadFileComponent } from './upload-file/upload-file';
export { EventOnMenu, BurgerPropertyComponent, EntryNumberComponent, CheckboxComponent, RenderFormComponent, RenderSettingsComponent, ErrorMessageStateComponent, AsyncActionState, AsyncActionStatusComponent, EntryValidatorComponent, PopInComponent, TopMenuComponent, UploadFileComponent, ErrorComponent, SpinnerComponent, PasswordEntryComponent, EntryComponent };
export { AsyncActionState, AsyncActionStatusComponent } from './async-action-status/async-status-component';
export { BurgerPropertyComponent } from './burger-property/burger-property';
export { CheckboxComponent } from './checkbox/checkbox';
export { EntryNumberComponent } from './entry-number/entry-number';
export { EntryValidatorComponent } from './entry-validator/entry-validator';
export { EntryComponent } from './entry/entry';
export { ErrorMessageStateComponent } from './error-message-state/error-message-state';
export { ErrorComponent } from './error/error';
export { PasswordEntryComponent } from './password-entry/password-entry';
export { PopInComponent } from './popin/popin';
export { RenderFormComponent } from './render-settings/render-form';
export {
RenderSettingsComponent,
SettingsItem,
isSettingsItem,
SettingType,
isSettingType,
CheckerParameter,
CheckerParameterType,
ReturnFunction,
} from './render-settings/render-settings';
export { SpinnerComponent } from './spinner/spinner';
export { EventOnMenu, TopMenuComponent } from './top-menu/top-menu';
export { UploadFileComponent } from './upload-file/upload-file';

View File

@ -0,0 +1,79 @@
import { CheckerParameter } from "../component/entry-validator/entry-validator";
import { isInArray, isNullOrUndefined, isObject, isString, isOptionalOf, isBoolean, isNumber, isUndefined } from "../utils";
export enum SettingType {
VALUE = 'VALUE',
LINE = 'LINE',
BOOLEAN = 'BOOLEAN',
NUMBER = 'NUMBER',
STRING = 'STRING',
PASSWORD = 'PASSWORD',
}
export function isSettingType(data: any): data is SettingType {
return isInArray(data, ['VALUE', 'LINE', 'NUMBER', 'BOOLEAN', 'STRING', 'PASSWORD']);
}
export interface SettingsItem {
// Type of the menu Node
type: SettingType;
// Unique key reference
key?: string;
// Displayed Title
title?: string;
// Description of the parameter
description?: string;
// placeholder of the parameter
placeholder?: string;
// Parameter key to SET/GET or the sub-menu
value?: boolean | string | Number;
// when data is change the value is set here undefined if not correct (must be set @ undefined):
newValue?: boolean | string | Number;
// checker to validate the data:
checker?: CheckerParameter
// result of the checker (must be set @ undefined):
state?: boolean | string;
// The element is require to have a valid form.
require?: boolean
}
export function isSettingsItem(data: any): data is SettingsItem {
if (isNullOrUndefined(data)) {
return false;
}
if (!isObject(data)) {
return false;
}
if (!isSettingType(data.type)) {
return false;
}
if (!isString(data.key)) {
return false;
}
if (!isOptionalOf(data.title, isString)) {
return false;
}
if (!isOptionalOf(data.description, isString)) {
return false;
}
if (!isOptionalOf(data.placeholder, isString)) {
return false;
}
if (
!isOptionalOf(data.value, isBoolean) &&
!isOptionalOf(data.value, isString) &&
!isOptionalOf(data.value, isNumber)
) {
return false;
}
if (!isUndefined(data.newValue)) {
return false;
}
if (!isOptionalOf(data.state, isString)) {
return false;
}
if (!isOptionalOf(data.require, isBoolean)) {
return false;
}
return true;
}

View File

@ -47,7 +47,7 @@ export class SSOService {
) {
return this.utf8_to_b64(data);
}
const pathName = getApplicationLocation();
const pathName = getApplicationLocation(this.environment);
if (isInArray(pathName, ['sso', '/sso', '/sso/'])) {
return this.utf8_to_b64('home');
}

View File

@ -13,6 +13,7 @@ import { SSOService } from './sso';
import { getApplicationLocation, isNullOrUndefined, sha512 } from '../utils';
import { HttpWrapperService, HTTPRequestModel, HTTPMimeType, ModelResponseHttp } from './http-wrapper_kjdhqslkjf';
import { Environment } from '../model/environment';
import { APP_BASE_HREF } from '@angular/common';
@Injectable()
@ -76,7 +77,7 @@ export class UserService {
* Check if the system can be connected
*/
checkAutoConnect(): Promise<void> {
let locationOrigin = getApplicationLocation();
let locationOrigin = getApplicationLocation(this.environment);
const self = this;
return new Promise<void>((resolve, reject) => {
// Need to use the windows global route to prevent the log in cycle ...
@ -91,7 +92,7 @@ export class UserService {
}
console.log(' ==> Check if need reconnect?');
let rememberMe = self.getRememberMe();
// TODO: in case of jest reload ==> no need to manage the SSO ==> just keep the token ... it in enought...
// TODO: in case of jest reload ==> no need to manage the SSO ==> just keep the token ... it in enough...
let token: undefined | string = undefined;
if (
isNullOrUndefined(this.environment.tokenStoredInPermanentStorage) ||
@ -109,7 +110,7 @@ export class UserService {
self.startSession(token ?? '', rememberMe)
.then(() => {
self.router.navigateByUrl(locationOrigin);
console.log(`update global URL = ${locationOrigin}`);
console.log(`update global URL = ${locationOrigin} APP_BASE_HREF=${APP_BASE_HREF}`);
resolve();
})
.catch(() => {

View File

@ -1,12 +1,11 @@
//import { environment } from 'environments/environment';
export function getApplicationLocation(): string {
import { Environment } from "../model";
export function getApplicationLocation(environment: Environment): string {
let pathName = location.pathname;
return pathName;
//console.log("start Path-name: '" + pathName + "'");
//console.log("check with: '" + environment.applName + "/sso/" + "'");
/*
if (pathName.startsWith('/' + environment.applName + '/')) {
pathName = pathName.substring(environment.applName.length + 2);
} else if (pathName.startsWith('/' + environment.applName)) {
@ -17,5 +16,4 @@ export function getApplicationLocation(): string {
pathName = pathName.substring(environment.applName.length);
}
return pathName;
*/
}

View File

@ -23,11 +23,11 @@
"experimentalDecorators": true,
"moduleResolution": "node",
"importHelpers": true,
"target": "ES2022",
"module": "ES2022",
"target": "ES2018",
"module": "ES2015",
"useDefineForClassFields": false,
"lib": [
"ES2022",
"ES2018",
"dom"
],
"emitDecoratorMetadata": true,

1
version.txt Normal file
View File

@ -0,0 +1 @@
0.4.1