Skip to content

Commit

Permalink
chore(frontend): set up typescript
Browse files Browse the repository at this point in the history
  • Loading branch information
c0rydoras committed Sep 4, 2024
1 parent ab050f7 commit a201b67
Show file tree
Hide file tree
Showing 38 changed files with 2,100 additions and 56 deletions.
2 changes: 1 addition & 1 deletion frontend/.ember-cli
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@
Setting `isTypeScriptProject` to true will force the blueprint generators to generate TypeScript
rather than JavaScript by default, when a TypeScript version of a given blueprint is available.
*/
"isTypeScriptProject": false
"isTypeScriptProject": true
}
112 changes: 101 additions & 11 deletions frontend/.eslintrc.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,107 @@
"use-strict";

module.exports = {
extends: ["@adfinis/eslint-config/ember-app"],
root: true,
parser: "@typescript-eslint/parser",
parserOptions: {
ecmaVersion: "latest",
},
plugins: ["ember", "@typescript-eslint", "import"],
extends: [
"eslint:recommended",
"plugin:ember/recommended",
"plugin:prettier/recommended",
],
env: {
browser: true,
},
rules: {
"ember/no-actions-hash": "warn",
"ember/no-component-lifecycle-hooks": "warn",
"ember/no-mixins": "warn",
"ember/no-new-mixins": "warn",
"ember/no-classic-classes": "warn",
"ember/no-classic-components": "warn",
"ember/no-get": "warn",
"ember/no-observers": "warn",
"qunit/no-assert-equal": "warn",
"ember/require-tagless-components": "warn",
// possible errors
"no-await-in-loop": "error",

// best practices
"array-callback-return": "error",
"dot-notation": "error",
eqeqeq: "error",
"no-alert": "error",
"no-else-return": "error",
"no-eval": "error",
"no-extend-native": "error",
"no-extra-bind": "error",
"no-floating-decimal": "error",
"one-var": ["error", "never"],
curly: ["error", "multi-line"],

// ES6
"no-var": "error",
"object-shorthand": "error",
"prefer-const": "error",
"prefer-destructuring": [
"error",
{ AssignmentExpression: { array: false, object: false } },
],
"prefer-rest-params": "error",
"prefer-spread": "error",
"prefer-template": "error",

// import
"import/no-duplicates": "error",
"import/no-unresolved": "off",
"import/order": [
"error",
{
"newlines-between": "always",
alphabetize: { order: "asc", caseInsensitive: true },
},
],

// tooling
"no-console": ["error", { allow: ["warn", "error"] }],
"no-debugger": "error",
},
overrides: [
// js files
{
files: ["**/*.js"],
extends: [
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended",
],
rules: {},
},
// ts files
{
files: ["**/*.ts"],
extends: [
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended",
],
rules: {},
},
// node files
{
files: [
"./.eslintrc.js",
"./.prettierrc.js",
"./.stylelintrc.js",
"./.template-lintrc.js",
"./ember-cli-build.js",
"./testem.js",
"./blueprints/*/index.js",
"./config/**/*.js",
"./lib/*/index.js",
"./server/**/*.js",
],
env: {
browser: false,
node: true,
},
extends: ["plugin:n/recommended"],
},
{
// test files
files: ["tests/**/*-test.{js,ts}"],
extends: ["plugin:qunit/recommended"],
},
],
};
14 changes: 14 additions & 0 deletions frontend/app/config/environment.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
/**
* Type declarations for
* import config from 'my-app/config/environment'
*/
declare const config: {
environment: string;
modulePrefix: string;
podModulePrefix: string;
locationType: "history" | "hash" | "none" | "auto";
rootURL: string;
APP: Record<string, unknown>;
};

export default config;
16 changes: 16 additions & 0 deletions frontend/app/models/absence-balance.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import Model, { attr, belongsTo, hasMany } from "@ember-data/model";

export default class AbsenceBalance extends Model {
@attr("number")
declare credit: number;

@attr("number")
declare usedDays: number;

@attr("django-duration") usedDuration;
@attr("number") balance;
@belongsTo("user", { async: false, inverse: "absenceBalances" }) user;
@belongsTo("absence-type", { async: false, inverse: "absenceBalances" })
absenceType;
@hasMany("absence-credit", { async: true, inverse: null }) absenceCredits;
}
55 changes: 55 additions & 0 deletions frontend/app/models/absence-credit.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/**
* @module timed
* @submodule timed-models
* @public
*/
import Model, { attr, belongsTo } from "@ember-data/model";

/**
* The absence credit model
*
* @class AbsenceCredit
* @extends DS.Model
* @public
*/
export default class AbsenceCredit extends Model {
/**
* The days
*
* @property {Number} days
* @public
*/
@attr("number") days;

/**
* The date
*
* @property {moment} date
* @public
*/
@attr("django-date") date;

/**
* The comment
*
* @property {String} comment
* @public
*/
@attr("string", { defaultValue: "" }) comment;

/**
* The absence type for which this credit counts
*
* @property {AbsenceType} absenceType
* @public
*/
@belongsTo("absence-type", { async: false, inverse: null }) absenceType;

/**
* The user to which this credit belongs to
*
* @property {User} user
* @public
*/
@belongsTo("user", { async: false, inverse: null }) user;
}
42 changes: 42 additions & 0 deletions frontend/app/models/absence-type.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/**
* @module timed
* @submodule timed-models
* @public
*/
import Model, { attr, hasMany } from "@ember-data/model";

/**
* The absence type model
*
* @class AbsenceType
* @extends DS.Model
* @public
*/
export default class AbsenceType extends Model {
/**
* The name of the absence type
*
* E.g Military, Holiday or Sickness
*
* @property {String} name
* @public
*/
@attr("string") name;

/**
* Whether the absence type only fills the worktime
*
* @property {Boolean} fillWorktime
* @public
*/
@attr("boolean") fillWorktime;

/**
* The balances for this type
*
* @property {AbsenceBalance[]} absenceBalances
* @public
*/
@hasMany("absence-balance", { async: true, inverse: "absenceType" })
absenceBalances;
}
56 changes: 56 additions & 0 deletions frontend/app/models/absence.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/**
* @module timed
* @submodule timed-models
* @public
*/
import Model, { attr, belongsTo } from "@ember-data/model";
import moment from "moment";

/**
* The report model
*
* @class Report
* @extends DS.Model
* @public
*/
export default class Absence extends Model {
/**
* The comment
*
* @property {String} comment
* @public
*/
@attr("string", { defaultValue: "" }) comment;

/**
* The duration
*
* @property {moment.duration} duration
* @public
*/
@attr("django-duration", { defaultValue: () => moment.duration() }) duration;

/**
* The date
*
* @property {moment} date
* @public
*/
@attr("django-date") date;

/**
* The type of the absence
*
* @property {AbsenceType} absenceType
* @public
*/
@belongsTo("absence-type", { async: false, inverse: null }) absenceType;

/**
* The user
*
* @property {User} user
* @public
*/
@belongsTo("user", { async: true, inverse: null }) user;
}
Loading

0 comments on commit a201b67

Please sign in to comment.