Skip to content

Instantly share code, notes, and snippets.

View sukima's full-sized avatar

Devin Weaver sukima

View GitHub Profile
import Component from '@glimmer/component';
export default class extends Component {
}
class EncodedText extends HTMLElement {
_state = 'encoded';
get isEncoded() {
return this._state === 'encoded';
}
@sukima
sukima / components.my-component\.js
Last active February 24, 2021 18:56
How to trap known errors
import Component from '@glimmer/component';
import { action } from '@ember/object';
import { tracked } from '@glimmer/tracking';
function handleError(error) {
if (!error.isExpected) {
throw error;
}
}
@sukima
sukima / components.bs-tab.tab-pane\.js
Created February 20, 2021 16:07
willDestroy called example
import Component from '@glimmer/component';
import { guidFor } from '@ember/object/internals';
export default class extends Component {
willDestroy() {
console.log(`willDestroy on BsTab::TabPane ${guidFor(this)}`);
super.willDestroy(...arguments);
}
}
@sukima
sukima / helpers.add-page-title-segment\.js
Last active February 5, 2021 21:39
add-page-title-segment
import Helper from '@ember/component/helper';
class TitleSegments {
constructor(segments = []) {
this.replace(segments);
}
replace(segments) {
this.segments = [...segments];
}
*[Symbol.iterator]() {
@sukima
sukima / components.dog-api-manager\.js
Last active February 2, 2021 01:47
Observer Pattern
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { inject as service } from '@ember/service';
export default class extends Component {
@service dogObserver;
@tracked isLoading;
@tracked error;
@tracked randomDog;
@sukima
sukima / components.my-form\.js
Last active January 9, 2021 02:55
Validity with changeset
import Component from '@glimmer/component';
import { action } from '@ember/object';
import { validate } from '../utils/validate';
export default class extends Component {
@action
validatedSubmit(event) {
event.preventDefault();
let { target: form } = event;
@sukima
sukima / components.my-form\.js
Last active January 8, 2021 08:30
Form validation (modifiers)
import Component from '@glimmer/component';
import { action } from '@ember/object';
import { validate } from '../utils/validate';
export default class extends Component {
@action
validatedSubmit(event) {
event.preventDefault();
let { target: form } = event;
@sukima
sukima / components.my-form\.js
Last active January 5, 2021 05:19
Validatable form
import Component from '@glimmer/component';
import { action } from '@ember/object';
export default class extends Component {
@action
validatedSubmit(event) {
event.preventDefault();
let { target: form } = event;
let validateEvent = new CustomEvent('validate');
@sukima
sukima / controllers.application\.js
Last active December 15, 2020 17:48
Change tracking
import Controller from '@ember/controller';
import { action } from '@ember/object';
import { tracked } from '@glimmer/tracking';
class Thing {
@tracked foobar = 'Foobar';
constructor(label) {
this.label = label;
}
toJSON() {
@sukima
sukima / components.my-component\.js
Last active December 11, 2020 17:15
Proxy bug in ember
import Component from '@glimmer/component';
import { action } from '@ember/object';
export default class extends Component {
@action
doSomething() {
this.args.foobar();
}
}