Skip to content

Instantly share code, notes, and snippets.

@neborn
neborn / use-task.js
Last active April 11, 2021 00:47
Use Task Hook
import {
useEffect,
useMemo
} from 'https://unpkg.com/htm@3.0.4/preact/standalone.module.js';
// Inspired by https://github.com/machty/ember-concurrency
export default function useTask(generator) {
const cancellable = useMemo(() => Cancellable.create(generator), [generator]);
useEffect(() => () => cancellable.cancel(), [cancellable]);
@neborn
neborn / components.container\.js
Last active February 14, 2021 01:36
Passing Simple Action Arguments
import Component from '@glimmer/component';
import { action, computed } from '@ember/object';
import { inject as service } from '@ember/service';
import { task } from 'ember-concurrency';
export default class ContainerComponent extends Component {
@service
api;
// this should be much cleaner with ember-concurrency 2.0
@neborn
neborn / components.container\.js
Last active February 14, 2021 01:35
Passing Complex Action Arguments
import Component from '@glimmer/component';
import { action } from '@ember/object';
import { inject as service } from '@ember/service';
export default class ContainerComponent extends Component {
@service
api;
@action
performAsyncAction(willSucceed) {
@neborn
neborn / components.add-employees-to-group\.js
Last active February 9, 2021 04:23
Add Employees To Group Example
import Component from '@glimmer/component';
import { inject as service } from '@ember/service';
import { cached } from 'tracked-toolbox';
export default class AddEmployeesToGroupComponent extends Component {
@service groupActions;
@cached
get flowModel() {
return this.groupActions.createAddEmployeesToGroupFlow({
@neborn
neborn / components.employee-search\.js
Last active February 9, 2021 04:28
Employee Search Example
import Component from '@glimmer/component';
import { action } from '@ember/object';
import { inject as service } from '@ember/service';
export default class EmployeeSearchComponent extends Component {
@service employeeSearch;
_employeeSearchQuery;
get employeeSearchQuery() {
@neborn
neborn / components.action-bar\.js
Last active February 8, 2021 16:12
Employee Search Example - Complete
import Component from '@glimmer/component';
import { action } from '@ember/object';
import { inject as service } from '@ember/service';
export default class ActionBarComponent extends Component {
@service employeeSearch;
}
@neborn
neborn / controllers.application\.js
Last active January 7, 2021 20:06
Async Get Example
import Controller from '@ember/controller';
import { task, timeout } from 'ember-concurrency';
import { cached } from 'tracked-toolbox';
import { tracked } from '@glimmer/tracking';
export default class ApplicationController extends Controller {
@tracked haveFetchSucceed = true;
@cached
get appName() {
@neborn
neborn / controllers.application\.js
Last active November 6, 2020 03:37
TrackedSet Helper
import Controller from '@ember/controller';
import { action } from '@ember/object';
import { inject as service } from '@ember/service';
import { TrackedSet } from 'tracked-built-ins';
export default class ApplicationController extends Controller {
@service
myService;
@neborn
neborn / controllers.application\.js
Created October 9, 2020 17:39
Tracked Query Params
import Controller from '@ember/controller';
import { action } from '@ember/object';
import { tracked } from '@glimmer/tracking';
export default class ApplicationController extends Controller {
queryParams = ['appName'];
@tracked
appName = 'Ember Twiddle';
import Controller from '@ember/controller';
import { decorate } from '../services/my-service';
export default class ApplicationController extends Controller {
@decorate('foo')
appName;
}