mirror of
https://github.com/clearml/clearml-web
synced 2025-06-26 18:27:02 +00:00
release v1.7 (#35)
This commit is contained in:
@@ -1,66 +1,58 @@
|
||||
<nav (smOverflows)="navbarOverflowed($event)" [overflowTrigger]="splitSize" [overflowDelay]="800"
|
||||
[class.minimized]="minimized">
|
||||
<span [routerLink]="['execution']" routerLinkActive="active" #rlaExecution="routerLinkActive"
|
||||
queryParamsHandling="preserve">
|
||||
<sm-navbar-item header="execution" [active]="rlaExecution.isActive" class="small-nav"></sm-navbar-item>
|
||||
</span>
|
||||
<span [routerLink]="['hyper-params/hyper-param/_empty_']" queryParamsHandling="merge">
|
||||
<sm-navbar-item header="configuration" class="small-nav" [active]="(routerConfig$| async)?.includes('hyper-params')"></sm-navbar-item>
|
||||
</span>
|
||||
<span [routerLink]="['artifacts']" routerLinkActive="active" #rlaModel="routerLinkActive" queryParamsHandling="preserve">
|
||||
<sm-navbar-item header="artifacts" class="small-nav" [active]="rlaModel.isActive"></sm-navbar-item>
|
||||
</span>
|
||||
<span [routerLink]="['general']" routerLinkActive="active" #rlaGeneral="routerLinkActive" queryParamsHandling="preserve">
|
||||
<sm-navbar-item header="info" class="small-nav" [active]="rlaGeneral.isActive"></sm-navbar-item>
|
||||
</span>
|
||||
<nav [overflowTrigger]="splitSize" (smOverflows)="navbarOverflowed($event)" [overflowDelay]="800" [class.minimized]="minimized">
|
||||
<span [routerLink]="['execution']" routerLinkActive #rlaExecution="routerLinkActive" queryParamsHandling="preserve">
|
||||
<sm-navbar-item header="execution" [active]="rlaExecution.isActive" class="small-nav"></sm-navbar-item>
|
||||
</span>
|
||||
<span [routerLink]="['hyper-params/hyper-param/_empty_']" queryParamsHandling="merge">
|
||||
<sm-navbar-item header="configuration"
|
||||
class="small-nav"
|
||||
[active]="(routerConfig$| async)?.includes('hyper-params')"></sm-navbar-item>
|
||||
</span>
|
||||
<span [routerLink]="['artifacts']" routerLinkActive #rlaModel="routerLinkActive" queryParamsHandling="preserve">
|
||||
<sm-navbar-item header="artifacts"
|
||||
class="small-nav"
|
||||
[active]="rlaModel.isActive"></sm-navbar-item>
|
||||
</span>
|
||||
<span [routerLink]="['general']" routerLinkActive #rlaGeneral="routerLinkActive" queryParamsHandling="preserve">
|
||||
<sm-navbar-item header="info"
|
||||
class="small-nav"
|
||||
[active]="rlaGeneral.isActive"></sm-navbar-item>
|
||||
</span>
|
||||
|
||||
<span [matMenuTriggerFor]="results" *ngIf="overflow">
|
||||
<sm-navbar-item
|
||||
header="results" class="small-nav" [multi]="true"
|
||||
[active]="rlaDebug.isActive || rlaPlots.isActive || rlaScalars.isActive || rlaLog.isActive"
|
||||
></sm-navbar-item>
|
||||
<sm-navbar-item header="results"
|
||||
class="small-nav"
|
||||
[multi]="true"
|
||||
[active]="rlaDebug.isActive || rlaPlots.isActive || rlaScalars.isActive || rlaLog.isActive"></sm-navbar-item>
|
||||
</span>
|
||||
<div class="d-inline-block" [style.visibility]="overflow ? 'hidden' : 'visible'">
|
||||
<span
|
||||
[routerLink]="baseInfoRoute.concat(['log'])"
|
||||
routerLinkActive="active"
|
||||
queryParamsHandling="preserve"
|
||||
#rlaLog="routerLinkActive"
|
||||
>
|
||||
<sm-navbar-item class="small-nav" header="console" [active]="rlaLog.isActive"></sm-navbar-item>
|
||||
</span>
|
||||
<span
|
||||
[routerLink]="baseInfoRoute.concat(['metrics','scalar'])"
|
||||
routerLinkActive="active"
|
||||
queryParamsHandling="preserve"
|
||||
#rlaScalars="routerLinkActive"
|
||||
>
|
||||
<sm-navbar-item class="small-nav" header="Scalars" [active]="rlaScalars.isActive"></sm-navbar-item>
|
||||
</span>
|
||||
<span
|
||||
[routerLink]="baseInfoRoute.concat(['metrics','plots'])" routerLinkActive="active"
|
||||
queryParamsHandling="preserve"
|
||||
#rlaPlots="routerLinkActive"
|
||||
>
|
||||
<sm-navbar-item class="small-nav" header="PLOTS" [active]="rlaPlots.isActive"></sm-navbar-item>
|
||||
</span>
|
||||
<span
|
||||
[routerLink]="baseInfoRoute.concat(['debugImages'])"
|
||||
routerLinkActive="active"
|
||||
queryParamsHandling="preserve"
|
||||
#rlaDebug="routerLinkActive"
|
||||
>
|
||||
<sm-navbar-item class="small-nav" header="DEBUG SAMPLES" [active]="rlaDebug.isActive"></sm-navbar-item>
|
||||
</span>
|
||||
<span [routerLink]="baseInfoRoute.concat(['log'])" routerLinkActive queryParamsHandling="preserve"
|
||||
#rlaLog="routerLinkActive">
|
||||
<sm-navbar-item class="small-nav" header="console" [active]="rlaLog.isActive"></sm-navbar-item>
|
||||
</span>
|
||||
<span [routerLink]="baseInfoRoute.concat(['metrics','scalar'])" routerLinkActive queryParamsHandling="preserve"
|
||||
#rlaScalars="routerLinkActive">
|
||||
<sm-navbar-item class="small-nav" header="Scalars" [active]="rlaScalars.isActive"></sm-navbar-item>
|
||||
</span>
|
||||
<span [routerLink]="baseInfoRoute.concat(['metrics','plots'])" routerLinkActive queryParamsHandling="preserve"
|
||||
#rlaPlots="routerLinkActive">
|
||||
<sm-navbar-item class="small-nav" header="PLOTS" [active]="rlaPlots.isActive"></sm-navbar-item>
|
||||
</span>
|
||||
<span [routerLink]="baseInfoRoute.concat(['debugImages'])" routerLinkActive queryParamsHandling="preserve"
|
||||
#rlaDebug="routerLinkActive">
|
||||
<sm-navbar-item class="small-nav" header="DEBUG SAMPLES" [active]="rlaDebug.isActive"></sm-navbar-item>
|
||||
</span>
|
||||
</div>
|
||||
<mat-menu #results="matMenu">
|
||||
<button mat-menu-item [routerLink]="baseInfoRoute.concat(['log'])" [class.active]="rlaLog.isActive"
|
||||
>CONSOLE</button>
|
||||
<button mat-menu-item [routerLink]="baseInfoRoute.concat(['metrics','scalar'])" [class.active]="rlaScalars.isActive"
|
||||
>SCALARS</button>
|
||||
<button mat-menu-item [routerLink]="baseInfoRoute.concat(['metrics','plots'])" [class.active]="rlaPlots.isActive"
|
||||
>PLOTS</button>
|
||||
<button mat-menu-item [routerLink]="baseInfoRoute.concat(['debugImages'])" [class.active]="rlaDebug.isActive"
|
||||
>DEBUG SAMPLES</button>
|
||||
<button mat-menu-item [routerLink]="baseInfoRoute.concat(['log'])" [class.active]="rlaLog.isActive">CONSOLE</button>
|
||||
<button mat-menu-item [routerLink]="baseInfoRoute.concat(['metrics','scalar'])"
|
||||
[class.active]="rlaScalars.isActive">SCALARS
|
||||
</button>
|
||||
<button mat-menu-item [routerLink]="baseInfoRoute.concat(['metrics','plots'])" [class.active]="rlaPlots.isActive">
|
||||
PLOTS
|
||||
</button>
|
||||
<button mat-menu-item [routerLink]="baseInfoRoute.concat(['debugImages'])" [class.active]="rlaDebug.isActive">DEBUG
|
||||
SAMPLES
|
||||
</button>
|
||||
</mat-menu>
|
||||
<ng-content select="[refresh]"></ng-content>
|
||||
</nav>
|
||||
|
||||
@@ -6,8 +6,7 @@ nav {
|
||||
position: relative;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid #efefef;
|
||||
//overflow: hidden;
|
||||
padding: 0 24px;
|
||||
padding: 0 48px 0 24px;
|
||||
|
||||
.refresh-position {
|
||||
position: absolute;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import {Component, Input} from '@angular/core';
|
||||
import {FeaturesEnum} from '../../../../business-logic/model/users/featuresEnum';
|
||||
import {selectRouterConfig} from '../../../../webapp-common/core/reducers/router-reducer';
|
||||
import {FeaturesEnum} from '~/business-logic/model/users/featuresEnum';
|
||||
import {selectRouterConfig} from '@common/core/reducers/router-reducer';
|
||||
import {Store} from '@ngrx/store';
|
||||
import {IExperimentInfoState} from '../../reducers/experiment-info.reducer';
|
||||
import {ExperimentInfoState} from '../../reducers/experiment-info.reducer';
|
||||
import {Observable} from 'rxjs';
|
||||
|
||||
|
||||
@@ -22,14 +22,14 @@ export class ExperimentInfoNavbarComponent {
|
||||
this.baseInfoRoute = minimized ? ['info-output'] : [];
|
||||
this._minimized = minimized;
|
||||
}
|
||||
get minimized(){
|
||||
get minimized() {
|
||||
return this._minimized;
|
||||
}
|
||||
|
||||
@Input() splitSize: number;
|
||||
|
||||
|
||||
constructor(private store: Store<IExperimentInfoState>,) {
|
||||
constructor(private store: Store<ExperimentInfoState>) {
|
||||
this.routerConfig$ = this.store.select(selectRouterConfig);
|
||||
}
|
||||
navbarOverflowed($event: boolean) {
|
||||
|
||||
@@ -38,6 +38,7 @@ export const experimentSyncedKeys = [
|
||||
'view.hiddenProjectTableCols',
|
||||
'view.metricsCols',
|
||||
'view.colsOrder',
|
||||
'output.scalarsHoverMode',
|
||||
'info.userKnowledge',
|
||||
'output.settingsList',
|
||||
];
|
||||
|
||||
@@ -1,17 +1,9 @@
|
||||
import {commonExperimentInfoReducer, ICommonExperimentInfoState, initialCommonExperimentInfoState} from '../../../webapp-common/experiments/reducers/common-experiment-info.reducer';
|
||||
import {CommonExperimentInfoState} from '@common/experiments/reducers/common-experiment-info.reducer';
|
||||
export {
|
||||
commonExperimentInfoReducer as experimentInfoReducer,
|
||||
initialCommonExperimentInfoState as initialState,
|
||||
} from '@common/experiments/reducers/common-experiment-info.reducer';
|
||||
|
||||
export interface IExperimentInfoState extends ICommonExperimentInfoState {
|
||||
export interface ExperimentInfoState extends CommonExperimentInfoState {
|
||||
errors: { [key: string]: any } | null;
|
||||
}
|
||||
|
||||
export const initialState: IExperimentInfoState = {
|
||||
...initialCommonExperimentInfoState,
|
||||
};
|
||||
|
||||
export function experimentInfoReducer(state: IExperimentInfoState = initialState, action): IExperimentInfoState {
|
||||
switch (action.type) {
|
||||
|
||||
default:
|
||||
return commonExperimentInfoReducer(state, action) as IExperimentInfoState;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
import {commonExperimentsInitialState, commonExperimentsViewReducer, ICommonExperimentsViewState} from '../../../webapp-common/experiments/reducers/common-experiments-view.reducer';
|
||||
|
||||
export type IExperimentsViewState = ICommonExperimentsViewState;
|
||||
|
||||
export const initialState: IExperimentsViewState = {
|
||||
...commonExperimentsInitialState,
|
||||
};
|
||||
|
||||
export const experimentsViewReducer = commonExperimentsViewReducer;
|
||||
export {
|
||||
commonExperimentsInitialState as initialState,
|
||||
commonExperimentsViewReducer as experimentsViewReducer,
|
||||
CommonExperimentsViewState as ExperimentsViewState
|
||||
} from '../../../webapp-common/experiments/reducers/common-experiments-view.reducer';
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import {ActionReducerMap, createSelector} from '@ngrx/store';
|
||||
import {experimentsViewReducer, IExperimentsViewState, initialState as viewInitialState} from './experiments-view.reducer';
|
||||
import {experimentInfoReducer, IExperimentInfoState, initialState as infoInitialState} from './experiment-info.reducer';
|
||||
import {experimentsViewReducer, ExperimentsViewState, initialState as viewInitialState} from './experiments-view.reducer';
|
||||
import {experimentInfoReducer, ExperimentInfoState, initialState as infoInitialState} from './experiment-info.reducer';
|
||||
import {experimentOutputReducer, ExperimentOutputState, initialState as outputInitialState} from './experiment-output.reducer';
|
||||
import {IExperimentInfo} from '../shared/experiment-info.model';
|
||||
import {TaskStatusEnum} from '~/business-logic/model/tasks/taskStatusEnum';
|
||||
@@ -9,8 +9,8 @@ import {selectSelectedModel} from '@common/models/reducers';
|
||||
import {selectCurrentUser} from '@common/core/reducers/users-reducer';
|
||||
|
||||
export interface ExperimentState {
|
||||
view: IExperimentsViewState;
|
||||
info: IExperimentInfoState;
|
||||
view: ExperimentsViewState;
|
||||
info: ExperimentInfoState;
|
||||
output: ExperimentOutputState;
|
||||
}
|
||||
|
||||
@@ -23,14 +23,14 @@ export const experimentsReducers: ActionReducerMap<ExperimentState, any> = {
|
||||
export const experiments = state => state.experiments ?? {} as ExperimentState;
|
||||
|
||||
// view selectors.
|
||||
export const experimentsView = createSelector(experiments, state => (state?.view ?? viewInitialState) as IExperimentsViewState);
|
||||
export const experimentsView = createSelector(experiments, state => (state?.view ?? viewInitialState) as ExperimentsViewState);
|
||||
export const selectExperimentsMetricsCols = createSelector(experimentsView, state => state.metricsCols);
|
||||
export const selectMetricVariants = createSelector(experimentsView, state => state.metricVariants);
|
||||
export const selectMetricsLoading = createSelector(experimentsView, state => state.metricsLoading);
|
||||
|
||||
|
||||
// info selectors
|
||||
export const experimentInfo = createSelector(experiments, state => (state?.info ?? infoInitialState) as IExperimentInfoState);
|
||||
export const experimentInfo = createSelector(experiments, state => (state?.info ?? infoInitialState) as ExperimentInfoState);
|
||||
export const selectSelectedExperiment = createSelector(experimentInfo, state => state?.selectedExperiment);
|
||||
export const selectExperimentInfoData = createSelector(experimentInfo, state => state.infoData);
|
||||
export const selectShowExtraDataSpinner = createSelector(experimentInfo, state => state.showExtraDataSpinner);
|
||||
@@ -48,7 +48,7 @@ export const selectIsSharedAndNotOwner = createSelector(selectSelectedExperiment
|
||||
);
|
||||
export const selectExperimentInfoDataFreeze = createSelector(experimentInfo, (state): IExperimentInfo => state.infoDataFreeze);
|
||||
|
||||
export const selectExperimentInfoErrors = createSelector(experimentInfo, (state): IExperimentInfoState['errors'] => state.errors);
|
||||
export const selectExperimentInfoErrors = createSelector(experimentInfo, (state): ExperimentInfoState['errors'] => state.errors);
|
||||
export const selectExperimentFormValidity = createSelector(selectExperimentInfoData, selectExperimentInfoErrors,
|
||||
(infoData, errors): boolean => {
|
||||
if (!infoData || !errors) {
|
||||
|
||||
Reference in New Issue
Block a user