try to implement fullscreen support for xCard Component ...
This commit is contained in:
@@ -20,6 +20,20 @@ export class XCardComponent extends XCardContainerComponent {
|
|||||||
//#region Props ...
|
//#region Props ...
|
||||||
//
|
//
|
||||||
private ACTION_PROVIDER_SUBSCRIPTION: Subscription;
|
private ACTION_PROVIDER_SUBSCRIPTION: Subscription;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Full Screen ...
|
||||||
|
private IS_FULLSCREEN: boolean = false;
|
||||||
|
public set isFullscreen(v: boolean) {
|
||||||
|
//
|
||||||
|
const isChanged = v != this.IS_FULLSCREEN;
|
||||||
|
|
||||||
|
//
|
||||||
|
this.IS_FULLSCREEN = v;
|
||||||
|
}
|
||||||
|
public get isFullscreen() {
|
||||||
|
return this.IS_FULLSCREEN;
|
||||||
|
}
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -31,7 +45,7 @@ export class XCardComponent extends XCardContainerComponent {
|
|||||||
//#region Action Provider Changed ...
|
//#region Action Provider Changed ...
|
||||||
//
|
//
|
||||||
const isActionProviderChanged = changeKeys.includes(
|
const isActionProviderChanged = changeKeys.includes(
|
||||||
nameof<XCardComponent>('actionProvider')
|
nameof<XCardComponent>('actionProvider'),
|
||||||
);
|
);
|
||||||
if (isActionProviderChanged) {
|
if (isActionProviderChanged) {
|
||||||
this.registerActionProvider();
|
this.registerActionProvider();
|
||||||
@@ -71,13 +85,72 @@ export class XCardComponent extends XCardContainerComponent {
|
|||||||
isNullOrEmptyString(object.title) &&
|
isNullOrEmptyString(object.title) &&
|
||||||
isNullOrEmptyString(object.subTitle)
|
isNullOrEmptyString(object.subTitle)
|
||||||
);
|
);
|
||||||
})
|
}),
|
||||||
)
|
),
|
||||||
)
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Actions ...
|
||||||
|
public async enterFullscreen(options?: FullscreenOptions) {
|
||||||
|
//
|
||||||
|
if (this.isFullscreen) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
const element: HTMLElement = this.element?.nativeElement;
|
||||||
|
if (!element) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
try {
|
||||||
|
//
|
||||||
|
if (!this.canUseFullscreen()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
await element.requestFullscreen(options);
|
||||||
|
|
||||||
|
//
|
||||||
|
this.isFullscreen = true;
|
||||||
|
this.detectChanges();
|
||||||
|
} catch {}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async exitFullscreen() {
|
||||||
|
//
|
||||||
|
if (!this.isFullscreen) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
try {
|
||||||
|
//
|
||||||
|
if (document.fullscreenElement) {
|
||||||
|
await document.exitFullscreen();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
this.isFullscreen = false;
|
||||||
|
this.detectChanges();
|
||||||
|
} catch {}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async toggleFullscreen() {
|
||||||
|
//
|
||||||
|
if (this.isFullscreen) {
|
||||||
|
await this.exitFullscreen();
|
||||||
|
} else {
|
||||||
|
await this.enterFullscreen();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
//
|
//
|
||||||
//#region Private ...
|
//#region Private ...
|
||||||
//
|
//
|
||||||
@@ -94,7 +167,7 @@ export class XCardComponent extends XCardContainerComponent {
|
|||||||
//
|
//
|
||||||
// Handle Action Provider ...
|
// Handle Action Provider ...
|
||||||
this.ACTION_PROVIDER_SUBSCRIPTION = this.applyTakeUntilWrapper(
|
this.ACTION_PROVIDER_SUBSCRIPTION = this.applyTakeUntilWrapper(
|
||||||
this.actionProvider.asObservable()
|
this.actionProvider.asObservable(),
|
||||||
).subscribe(async (model) => {
|
).subscribe(async (model) => {
|
||||||
//
|
//
|
||||||
if (!model) {
|
if (!model) {
|
||||||
@@ -107,6 +180,21 @@ export class XCardComponent extends XCardContainerComponent {
|
|||||||
case XCardAction.Refresh:
|
case XCardAction.Refresh:
|
||||||
this.detectChanges();
|
this.detectChanges();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
case XCardAction.EnterFullScreen:
|
||||||
|
await this.enterFullscreen();
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
case XCardAction.ExitFullScreen:
|
||||||
|
await this.exitFullscreen();
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
case XCardAction.ToggleFullScreen:
|
||||||
|
await this.toggleFullscreen();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -122,5 +210,14 @@ export class XCardComponent extends XCardContainerComponent {
|
|||||||
this.ACTION_PROVIDER_SUBSCRIPTION = null;
|
this.ACTION_PROVIDER_SUBSCRIPTION = null;
|
||||||
}
|
}
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
|
private canUseFullscreen(): boolean {
|
||||||
|
return !!(
|
||||||
|
document.fullscreenEnabled ||
|
||||||
|
(document as any).webkitFullscreenEnabled ||
|
||||||
|
(document as any).mozFullScreenEnabled ||
|
||||||
|
(document as any).msFullscreenEnabled
|
||||||
|
);
|
||||||
|
}
|
||||||
//#endregion
|
//#endregion
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,9 @@ import { XFrameworkComponentsConfig } from '../config/x-framework-components.con
|
|||||||
|
|
||||||
export enum XCardAction {
|
export enum XCardAction {
|
||||||
Refresh = 'refresh',
|
Refresh = 'refresh',
|
||||||
|
ExitFullScreen = 'exit_full_screen',
|
||||||
|
EnterFullScreen = 'enter_full_screen',
|
||||||
|
ToggleFullScreen = 'toggle_full_screen',
|
||||||
}
|
}
|
||||||
|
|
||||||
export type XCardActionIdentifier = XCardAction | string;
|
export type XCardActionIdentifier = XCardAction | string;
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ import {
|
|||||||
XActionBarActionFiredModel,
|
XActionBarActionFiredModel,
|
||||||
} from '../x-action-bar/x-action-bar.typings';
|
} from '../x-action-bar/x-action-bar.typings';
|
||||||
import { XIconNames } from '../x-icon/x-icon.typings';
|
import { XIconNames } from '../x-icon/x-icon.typings';
|
||||||
|
import { XCardAction } from '../x-card/x-card.typings';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'x-chart',
|
selector: 'x-chart',
|
||||||
@@ -670,6 +671,12 @@ export class XChartComponent extends XChartContainerComponent {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
this.cardActionProvider.next({ action: XCardAction.ToggleFullScreen });
|
||||||
|
|
||||||
|
//
|
||||||
|
return;
|
||||||
|
|
||||||
//
|
//
|
||||||
const chartWrapper = this.chartContainer.nativeElement;
|
const chartWrapper = this.chartContainer.nativeElement;
|
||||||
const doc = document as any;
|
const doc = document as any;
|
||||||
|
|||||||
Reference in New Issue
Block a user