* add @angular/cli to the project * increase nodejs version -> 8.2.1 * add lerna * merge web and shared module * move electron module into packages as uhk-agent Electron agent functionality is not working * delete symlinker * convert private properties to public of component if used in html * revert uhk-message.component * fix component path * fix the correct name of the uhk-message.component.scss * building web and electron module * delete uhk-renderer package * handle device connect disconnect state * add privilege detection * fix set privilege functionality * turn back download keymap functionality * add bootstrap, select2 js and fix null pointer exception * turn back upload data to keyboard * fix send keymap * fix test-serializer * add missing package.json * merging * fix appveyor build * fix linting * turn back electron storage service * commit the missing electron-datastorage-repository * update node to 8.3.0 in .nvmrc and log node version in appveyor build * set exact version number in appveyor build * vertical align privilege and missing device components * set back node version to 8 in appveyor * move node-usb dependency from usb dir to root maybe it is fix the appveyor build * revert usb to root * fix electron builder script * fix electron builder script * turn off electron devtools * remove CTRL+U functionality * fix CTRL+o * fix lint error * turnoff store freeze * start process when got `Error: EPERM: operation not permitted` error * move files from root usb dir -> packages/usb
91 lines
3.0 KiB
TypeScript
91 lines
3.0 KiB
TypeScript
import { Component, HostListener, ViewChild } from '@angular/core';
|
|
import { ActivatedRoute } from '@angular/router';
|
|
|
|
import '@ngrx/core/add/operator/select';
|
|
import { Store } from '@ngrx/store';
|
|
|
|
import { Observable } from 'rxjs/Observable';
|
|
import 'rxjs/add/operator/first';
|
|
import 'rxjs/add/operator/let';
|
|
import 'rxjs/add/operator/map';
|
|
import 'rxjs/add/operator/publishReplay';
|
|
import 'rxjs/add/operator/switchMap';
|
|
import 'rxjs/add/operator/pluck';
|
|
import 'rxjs/add/operator/combineLatest';
|
|
|
|
import { saveAs } from 'file-saver';
|
|
|
|
import { Keymap } from '../../../config-serializer/config-items/keymap';
|
|
import { AppState } from '../../../store';
|
|
import { getKeymap, getKeymaps, getUserConfiguration } from '../../../store/reducers/user-configuration';
|
|
import 'rxjs/add/operator/pluck';
|
|
import { SvgKeyboardWrapComponent } from '../../svg/wrap/svg-keyboard-wrap.component';
|
|
|
|
@Component({
|
|
selector: 'keymap-edit',
|
|
templateUrl: './keymap-edit.component.html',
|
|
styleUrls: ['./keymap-edit.component.scss'],
|
|
host: {
|
|
'class': 'container-fluid'
|
|
}
|
|
})
|
|
export class KeymapEditComponent {
|
|
|
|
@ViewChild(SvgKeyboardWrapComponent) wrap: SvgKeyboardWrapComponent;
|
|
|
|
keyboardSplit: boolean;
|
|
|
|
deletable$: Observable<boolean>;
|
|
protected keymap$: Observable<Keymap>;
|
|
|
|
constructor(protected store: Store<AppState>,
|
|
route: ActivatedRoute) {
|
|
this.keymap$ = route
|
|
.params
|
|
.pluck<{}, string>('abbr')
|
|
.switchMap((abbr: string) => store.let(getKeymap(abbr)))
|
|
.publishReplay(1)
|
|
.refCount();
|
|
|
|
this.deletable$ = store.let(getKeymaps())
|
|
.map((keymaps: Keymap[]) => keymaps.length > 1);
|
|
}
|
|
|
|
downloadKeymap() {
|
|
const exportableJSON$: Observable<string> = this.keymap$
|
|
.switchMap(keymap => this.toExportableJSON(keymap))
|
|
.map(exportableJSON => JSON.stringify(exportableJSON));
|
|
|
|
this.keymap$
|
|
.combineLatest(exportableJSON$)
|
|
.first()
|
|
.subscribe(latest => {
|
|
const keymap = latest[0];
|
|
const exportableJSON = latest[1];
|
|
const fileName = keymap.name + '_keymap.json';
|
|
saveAs(new Blob([exportableJSON], { type: 'application/json' }), fileName);
|
|
});
|
|
}
|
|
|
|
@HostListener('window:keydown.alt.s', ['$event'])
|
|
toggleKeyboardSplit() {
|
|
this.keyboardSplit = !this.keyboardSplit;
|
|
}
|
|
|
|
private toExportableJSON(keymap: Keymap): Observable<any> {
|
|
return this.store
|
|
.let(getUserConfiguration())
|
|
.first()
|
|
.map(userConfiguration => {
|
|
return {
|
|
site: 'https://ultimatehackingkeyboard.com',
|
|
description: 'Ultimate Hacking Keyboard keymap',
|
|
keyboardModel: 'UHK60',
|
|
dataModelVersion: userConfiguration.dataModelVersion,
|
|
objectType: 'keymap',
|
|
objectValue: keymap.toJsonObject()
|
|
};
|
|
});
|
|
}
|
|
}
|