Skip to content

Instantly share code, notes, and snippets.

View vakrilov's full-sized avatar
💡

Alexander Vakrilov vakrilov

💡
View GitHub Profile
@vakrilov
vakrilov / androidx-flowchart.jpg
Last active April 24, 2019 11:06
AndroidX Plugin Migration Guide
androidx-flowchart.jpg
@vakrilov
vakrilov / livesync-navigation.ts
Last active June 5, 2019 07:23
Angular HMR RC
import { NgZone } from "@angular/core";
import { Router } from "@angular/router";
import { onBeforeLivesync, onAfterLivesync } from "nativescript-angular/platform-common";
import { RouterExtensions } from "nativescript-angular/router";
let cachedUrl: string;
onBeforeLivesync.subscribe(moduleRef => {
console.log("#### onBeforeLivesync");
if (moduleRef) {
const router = <Router>moduleRef.injector.get(Router);
@vakrilov
vakrilov / view-state-utils.ts
Last active August 22, 2018 15:14
view-state-utils
const viewStateKey = "__vs";
export function attachViewState<T>(attachTo: string, defaultValueFactory?: () => T) {
return (target: any, key: string) => {
const assureViewState = (obj) => {
if (typeof obj[attachTo][viewStateKey] === "undefined") {
// console.log("> creating default view sate");
obj[attachTo][viewStateKey] = defaultValueFactory();
}
}
@vakrilov
vakrilov / ns-replace-bootstrap.ts
Created August 3, 2018 09:50
ns-bootstrap-transformer
import { dirname, relative } from 'path';
import * as ts from 'typescript';
import {
StandardTransform,
TransformOperation,
collectDeepNodes,
insertStarImport,
ReplaceNodeOperation,
makeTransform,
} from "@ngtools/webpack/src/transformers"
@vakrilov
vakrilov / app.component.ts
Last active February 23, 2018 09:38
Notify Layout Event Implementation
import { Component } from "@angular/core";
import { View } from "tns-core-modules/ui/core/view";
@Component({
selector: "ns-app",
template: `
<GridLayout rows="auto * auto">
<Label text="------>>>>>"></Label>
<notify-layout-view row="1" backgroundColor="lightgreen" (layout)="onLayout($event)"></notify-layout-view>
<Label text="------>>>>>" row="2"></Label>
@vakrilov
vakrilov / notify-layout-view.ts
Created February 23, 2018 09:37
Notify Layout Event Implementation
import { StackLayout } from "tns-core-modules/ui/layouts/stack-layout";
import { isAndroid, isIOS } from "tns-core-modules/platform";
import { View } from "tns-core-modules/ui/core/view";
import { registerElement } from "nativescript-angular/element-registry";
export class NotifyLayoutView extends StackLayout {
private listener: android.view.View.OnLayoutChangeListener
public createNativeView() {
const nativeView = super.createNativeView();

One of the main goals of tns-core-modules@4.0 is to enable more flexible composition of UI. Let's start with some history. Before 4.0 we create Frame control for you (check application.ios.ts and frame.android.ts). Frame control allows you to do navigation forward or backward. While this is convenient it introduce other issues that can't be workaround easliy. For example if you want to have TabView in all pages you have to include it in the xml and set its selectedIndex so that once you navigate to different page a correct TabViewItem is selected. This leads to several problems:

  • parse more xml
  • increase memory usage
  • increase loading time

Same issues apply if you want to have SideDrawer control as a root component.

So in order to resolve these starting with 4.0 applicat

@vakrilov
vakrilov / 1.1 Action-bar
Last active November 13, 2017 16:03
NativeScript 101
<ActionBar title="The Morse Code App" class="action-bar">
</ActionBar>
@vakrilov
vakrilov / main.js
Created November 1, 2017 14:34
Flashlight
var app = require("tns-core-modules/application");
var plat = require("tns-core-modules/platform");
exports.turnOn = function (args) {
flash(true);
}
exports.turnOff = function (args) {
flash(false);
}
@vakrilov
vakrilov / component.html
Created September 17, 2017 08:42
Noise detection demo
<StackLayout class="page" rows="auto, auto, *">
<Button text="start" (tap)="start()"></Button>
<Button text="stop" (tap)="stop()"></Button>
<Label text="HEYA" class="h2 text-center" [scaleX]="scale" [scaleY]="scale" margin="100"></Label>
</StackLayout>