Commit Graph

464 Commits

Author SHA1 Message Date
Hannes Küttner
1e271fa1d0 Rename system-field[-tree] collection prop to collectionName (#18193) 2023-04-14 14:18:02 -04:00
Hannes Küttner
ebba7a68e7 Migrate to Material Symbols (#18004)
* Migrate to Material Symbols

* Fix lint issues

* Use canonical `bookmark` icon

* Update `copy` icon name

* Replace `highlight_alt` with `select` icon

* Add directus_presets default icon migration

* Fix lint (again)

* Add spaces around icon group names

* Replace missing _outline icons

* Replace `arrow_backward` with `arrow_back`

* Update migrations

* Sign CLA

* merge migrations

* Revert group name display tweak

* Fix hover color + grid centering

* Update app/src/interfaces/file-image/file-image.vue

---------

Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
2023-04-12 13:12:37 -04:00
Pascal Jufer
f09f440146 Enhance bug reporting from within the app (#16566)
* Fix paths of imports

* Process not-found.vue as ts

To prevent the following error from 'vue-tsc':
  error TS6504: File '/Users/pascal/Development/directus/app/src/modules/insights/routes/not-found.vue.js' is a JavaScript file. Did you mean to enable the 'allowJs' option?

Note: We could also enable 'allowJS' but since this is the only js file
this seems to be a more fitting fix

* Drop hljs language definition for GraphQL (now in core)

* Enhance bug reporting from within the app

* Simplify simplify simplify

---------

Co-authored-by: rijkvanzanten <rijkvanzanten@me.com>
2023-04-11 15:04:26 -04:00
Rijk van Zanten
dd93fe6032 Improve error message on failed import (#18130) 2023-04-11 10:46:33 -04:00
Gerard Lamusse
e66ee967f0 If undefined collection, use item as relative url (#15806)
* If no undefined collection, use item as relative url

* Only navigate if item is set

* Added Gerard Lamusse (u12206050)

---------

Co-authored-by: Brainslug <br41nslug@users.noreply.github.com>
Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
2023-04-11 09:03:41 -04:00
Nitwel
9cbfa88e81 Fix default values (#15710)
* Fix default values

* run linter

* use assign

* fix working with permissions

* run linter

* fix set related item to empty when having junction

* check for empty

* Update app/src/views/private/components/drawer-item.vue

---------

Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
Co-authored-by: Brainslug <br41nslug@users.noreply.github.com>
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
Co-authored-by: Azri Kahar <42867097+azrikahar@users.noreply.github.com>
2023-04-10 21:23:49 +00:00
Nitwel
88a401ca20 Make headers sticky again (#17850)
Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
2023-04-07 12:29:41 +02:00
Rijk van Zanten
2983e61870 The Great TypeScript Modernization Program Season 3 Episode 6: The Big One (#18014)
* Step 1

* Step 2

* False sense of confidence

* Couple more before dinner

* Update schema package

* Update format-title

* Upgrade specs file

* Close

* Replace ts-node-dev with tsx, and various others

* Replace lodash with lodash-es

* Add lodash-es types

* Update knex import

* More fun is had

* FSE

* Consolidate repos

* Various tweaks and fixes

* Fix specs

* Remove dependency on knex-schema-inspector

* Fix wrong imports of inspector

* Move shared exceptions to new package

* Move constants to separate module

* Move types to new types package

* Use directus/types

* I believe this is no longer needed

* [WIP] Start moving utils to esm

* ESMify Shared

* Move shared utils to  @directus/utils

* Use @directus/utils instead of @directus/shared/utils

* It runs!

* Use correct schemaoverview type

* Fix imports

* Fix the thing

* Start on new update-checker lib

* Use new update-check package

* Swap out directus/shared in app

* Pushing through the last bits now

* Dangerously make extensions SDK ESM

* Use @directus/types in tests

* Copy util function to test

* Fix linter config

* Add missing import

* Hot takes

* Fix build

* Curse these default exports

* No tests in constants

* Add tests

* Remove tests from types

* Add tests for exceptions

* Fix test

* Fix app tests

* Fix import in test

* Fix various tests

* Fix specs export

* Some more tests

* Remove broken integration tests

These were broken beyond repair.. They were also written before we really knew what we we're doing with tests, so I think it's better to say goodbye and start over with these

* Regenerate lockfile

* Fix imports from merge

* I create my own problems

* Make sharp play nice

* Add vitest config

* Install missing blackbox dep

* Consts shouldn't be in types

tsk tsk tsk tsk

* Fix type/const usage in extensions-sdk

* cursed.default

* Reduce circular deps

* Fix circular dep in items service

* vvv

* Trigger testing for all vendors

* Add workaround for rollup

* Prepend the file protocol for the ESM loader to be compatible with Windows
"WARN: Only URLs with a scheme in: file and data are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:'"

* Fix postgres

* Schema package updates

Co-authored-by: Azri Kahar <42867097+azrikahar@users.noreply.github.com>

* Resolve cjs/mjs extensions

* Clean-up eslint config

* fixed extension concatination

* using string interpolation for consistency

* Revert MySQL optimisation

* Revert testing for all vendors

* Replace tsx with esbuild-kit/esm-loader

Is a bit faster and we can rely on the built-in `watch` and `inspect`
functionalities of Node.js

Note: The possibility to watch other files (.env in our case) might be
added in the future, see https://github.com/nodejs/node/issues/45467

* Use exact version for esbuild-kit/esm-loader

* Fix import

---------

Co-authored-by: ian <licitdev@gmail.com>
Co-authored-by: Brainslug <tim@brainslug.nl>
Co-authored-by: Azri Kahar <42867097+azrikahar@users.noreply.github.com>
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
2023-04-04 17:41:56 -04:00
Rijk van Zanten
bb952f9386 Add optional confirmation dialog with input fields to Manual Trigger in Flows (#17603)
Co-authored-by: Azri Kahar <42867097+azrikahar@users.noreply.github.com>
Co-authored-by: ian <licitdev@gmail.com>
Co-authored-by: Brainslug <br41nslug@users.noreply.github.com>
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
2023-03-31 19:37:50 +00:00
Nitwel
a5b81c7a2d properly apply query param to url (#17956)
Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
2023-03-27 09:45:44 -04:00
Azri Kahar
eb65d60236 Improve error handling for app extensions (#17191)
* add util function to get vue component name

* add global error handler

* add v-error-boundary component

* use error boundary to wrap insights panels

* use error boundary to wrap form interfaces

* use error boundary in render display and template

* use error boundary in extension options

* use error boundary for flows operation overview

* extract default options-overview into a component

* add tests
2023-03-16 13:04:17 +01:00
Nitwel
fd5ac8a195 Fix margin on drawer item (#17726) 2023-03-07 15:11:31 +01:00
ian
910b7fae23 Add root path to module bar images (#17714) 2023-03-06 14:08:29 +01:00
Nitwel
9d1dd1ae52 Show validation errors in drawer-item (#17423)
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
2023-03-06 11:47:05 +01:00
Pascal Jufer
e1437fdd7f Remove superfluous args (follow up on #17449) (#17482) 2023-02-10 19:26:46 +08:00
Pascal Jufer
d5395ce72c Follow-up on "Drop inline rendering of docs" (#17449)
* Follow-up of "Drop inline rendering of docs"

* Remove docs hack

---------

Co-authored-by: rijkvanzanten <rijkvanzanten@me.com>
2023-02-08 11:25:32 -05:00
ian
4d29276515 Use img tag for images on module bar (#17236)
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
2023-02-08 13:05:40 +00:00
Azri Kahar
89fcb19a16 Expose schema endpoints (#14713)
* Expose schema endpoints

* respond with 204

* fix payload for export flag

* allow export as YAML

* use SchemaService

* move getStringFromStream to utils

* clearer exceptions with logs

* check empty request body

* specs

* add bypassCache flag and remove flushCaches calls

* Identify integer typed fields in Oracle

* Fix uuid foreign keys type for Oracle

* Detect autoincrement for CockroachDB

* Bypass cache for fields and relations services

* Add same DB tests

* Test if working for all vendors

* Add schema snapshot testing into sequential flow

* Fix schema re-apply attempts when it's a different database vendor (#14816)

* prevent diffing on certain properties

* fix apply-snapshot test

* prevent updates to autoincrement fields' schema

* sanitize relations

* remove `colleciton.schema.sql` parsing in test

It is now being sanitized by `sanitizeCollection()` function in get-snapshot-diff.ts

* Change concurrency group to not cancel test running on main

* remove multipart for apply & add hash checking

* check incoming version & add force query param

* refine error message & stub for nested hash

* add `vendor` top-level property

as an additional safety net for cross db vendor applies

* sanitize generated schema snapshots

* snapshot joi validation

* diff joi validation

* minor cleanup

* extract applyDiff & use deep-diff applyChange

* use applyDiff in schema service

* Mark vendor as optional

* Update tests to apply diffs

* move force flag check into service

* Patch mssql vendor typo

* Set relation no action in cyclic relations

* Update mysql timestamp default value

* Oracle cannot define no action

* Update oracle timestamp type default values

* add hash checking for outdated diffs

* fix diff service & endpoint

* Add hashes when returning after

* Fix self referencing relations for Oracle

* Add temp fix for CURRENT_TIMESTAMP defaults in Oracle

* clean up driver and database client types

* only require diff hash if not kind N

* update hash comparison logic for create/delete

* Set no action constraint for self referencing M2M in MSSQL

* Add basic hash check tests

* omit default value when hashing auto increments

Specifically for CockroachDB with differing sequences

* add vendor check

* update specs

* Validate vendors with type definition

* Spread the vendors input array

* re-add Export component

* re-add js-yaml to root

* Propagate mutation options for schema apply

* Verify that snapshots differ and clear cache before hash tests

* Fix unit test

* Revert temp fix for CURRENT_TIMESTAMP defaults in Oracle

* Define and reuse type for export format

* Define and reuse list of database clients

* change `were` to `was`

* change `where` to `were`

* add some empty lines for readability

* tweak exception message

* fix test

* use object-hash

* use boolean to check whether file is included

* simplify request content type check

* throw error when multiple files were uploaded

* use nullish coalesce instead of short circuit

* Update api/src/services/schema.ts

Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>

* Remove unnecessary `Omit` on `SnapshotWithHash` type

* Revert "Remove unnecessary `Omit` on `SnapshotWithHash` type"

This reverts commit d22ac771ec.

* check empty snapshot earlier

* use allow-list logic via pick instead of omit

* Update api/src/services/schema.ts

Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>

* Move to own /schema endpoint controller

* Fix refs to schema endpoint

* move streamToString to utils package

* move get-versioned-hash and add test

* extract kind into an enum

* Fix mysql5 timestamp value

* Fix test collection existing on rerun

* resolve TODO comment in blackbox test

* Drop deep level hashes in diff

These hashes are used only for more accurate error reporting
but are otherwise superfluous, since changes are already
detected by the top level hash.
Therefore we remove them in favor of a simpler diff format and
implementation.

* Revert schema "fix" for createItem, add comment

* Strict diff schema validation

* Revert CrDB auto-increment detection patch in 816c998

* Clear systemCache to expose newly added fields

* Use DiffKind constants

* Extract diff & snapshot validation into own tested utils

* Apply suggestions from @azrikahar

* Update knex-schema-inspector to 3.0.1

Includes the fix for CrDB auto-increment detection (knex/knex-schema-inspector#135)

* Update knex-schema-inspector in packages

* Update lock file

* add test for schema service

* add test for export service

* add relevant tests to modified util functions

* fix csv test to account for os end of line

* fix files controller test

* dedupe test data for schema service

* Align schema specs with docs

* Update api/src/controllers/schema.ts

* Revert testing for all vendors

---------

Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
Co-authored-by: ian <licitdev@gmail.com>
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
2023-01-31 17:36:49 +00:00
Jay Bharadia
d42de82bcd Fixes Issue #17072 Image is displayed to small in the Editing Image panel #17072 (#17216) 2023-01-18 14:16:40 +00:00
ian
af2afd0d4e Fix fetching from related collection in drawer item (#17210) 2023-01-18 15:21:41 +08:00
ian
25e3c16b3f Use countDistinct for item and total counts (#17184)
* Use countDistinct for item and total counts

* Propagate changes to export sidebar detail

* Try to trigger GH actions

* fix use-collection mock

* cover countDistinct in use-items test

* simplify primaryKeyField usage

* Revert typing

* Update mock values for differentiation

Co-authored-by: Azri Kahar <42867097+azrikahar@users.noreply.github.com>
2023-01-17 16:18:34 +08:00
Brainslug
dda1afcf16 Collection export limit 0 leads to 500 error (#16722)
* prevent 500 error when limit=0

* short circuit parser instead

* removed unneeded comment

* setting a sensible minimum and step for export limit

* fixed notif message when exporting limit=-1

* re-added !exportSettings.limit fallback behavior

* guard against negative limit values lower than -1

* add unit test for sanitizeQuery

* remove unnecessary test cases

because offset and page are validated in validateQuery

* delegate validation to validateQuery instead

* use sanitizeQuery util for export

* Added check for integers

Co-authored-by: ian <licitdev@gmail.com>

* validate instead of sanitize

* removed obsolete test

* added integer checks for limit, offset, page and sensible minimums

Co-authored-by: Azri Kahar <42867097+azrikahar@users.noreply.github.com>
Co-authored-by: ian <licitdev@gmail.com>
Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
2023-01-10 09:35:31 +01:00
Pascal Jufer
c16be6f644 Type fixes in app (part 1) (#16545)
* Fix paths of imports

* Process not-found.vue as ts

To prevent the following error from 'vue-tsc':
  error TS6504: File '/Users/pascal/Development/directus/app/src/modules/insights/routes/not-found.vue.js' is a JavaScript file. Did you mean to enable the 'allowJs' option?

Note: We could also enable 'allowJS' but since this is the only js file
this seems to be a more fitting fix

* Drop hljs language definition for GraphQL (now in core)

Co-authored-by: rijkvanzanten <rijkvanzanten@me.com>
2023-01-09 18:29:03 +00:00
Andrii Trubai
216930ee92 Render-template layout fix (#16476) 2023-01-09 11:58:32 -05:00
Azri Kahar
6bf5de1f9d Re-use getEndpoint utility function (#16700)
* re-use getEndpoint util

* rename endpoint var to route in calendar layout

* move loading below early return statements
2022-12-23 11:50:21 -05:00
Brainslug
807bda3dcb Follow up user Roles not loading (#16278)
* applied the same role fix too users invite

* added same fix when saving permissions

* Prevent loading users unecessarily on the permission page

* Added proper `deep` query typing

* fixed typing for tests

* apply similar fix for navigation folder
2022-12-13 15:05:14 +01:00
Brainslug
939c5ab197 Use absolute url instead of relative path for exports (#16724) 2022-12-05 17:11:31 -05:00
Azri Kahar
1c93cc661e Reduce translate function calls in the App (#16038)
* translate fields during hydration

* patch untranslated raw values on field edit

* simplify/remove existing translate usages

* minor codestyle

* translate field note and validation_message

* stub api call in fleld-detail store test

* skip fields translation before user locale sets in

* optimize hydration calls

* use translateLiteral for note & validation_message

* cherry pick field meta properties to patch

* reduce setLanguage calls & settings requests

* settings store test & type update

* tweak variable casing

* test server store & fix existing type/ref issues

* update fields store test for skipTranslation

* fix render-display merge

* await field update before opening drawer

* fetch meta at the end to load relationships first

* add loading state to prevent editing some fields

Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
Co-authored-by: Brainslug <br41nslug@users.noreply.github.com>
2022-11-30 13:33:31 +01:00
Andrii Trubai
12786728ed Fix .module-nav-resize-handle layout (#16518)
Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
2022-11-18 15:18:09 -05:00
Pascal Jufer
47db8e5d2f Clean-up dependencies (#16481)
* Clean-up api

- Remove unnecessary deps
- rimraf -> del-cli

* Clean-up app

- bytes -> pretty-bytes
- Remove ms as we already have pretty-ms
- Remove other unnecessary deps
- Add storybook build to gitignore

* Clean-up drive packages

- Simplify cleanup scripts
- rimraf -> del-cli
- Remove unnecessary deps

* Clean-up schema

- Remove unnecessary dep (lodash)
- Replace 'npm-watch' with native watch mode

* Clean-up shared

- Remove unnecessary dep (c8, adding @vitest/coverage-c8 will be addressed in
  other PR)
- rimraf -> del-cli
- npm-run-all -> concurrently

* Clean-up root

- Add missing eslint-plugin-jest dep
- listr -> listr2

* Make build output a bit friendlier

* Remove cleanup scripts

Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
2022-11-18 17:02:41 +00:00
Azri Kahar
d38d8255c0 fix shares drawer closing event (#16487) 2022-11-17 11:22:25 -05:00
Nicola Krumschmidt
7bf90efa62 Add support for a package extension bundle type (#15672)
* Add bundle type to constants and types

* Add support for API bundle extensions

* Rename generateExtensionsEntry to generateExtensionsEntrypoint

* Add support for App bundle extensions

* Refactor App extension registration

* Replace extensions inject with useExtensions()

* Replace getInterfaces() with useExtensions()

* Replace getDisplays() with useExtensions()

* Replace getLayouts() with useExtensions()

* Replace getModules() with useExtensions()

* Replace getPanels() with useExtensions()

* Replace getOperations() with useExtensions()

* Add useExtension() composable

* Replace useExtensions() with useExtension() where applicable

* Remove interface getters

* Remove display getters

* Remove layout getters

* Remove module getter

* Remove panel getters

* Remove operation getters

* Rename extension register.ts files to index.ts

* Perform module pre register check in parallel

* Remove Refs from AppExtensionConfigs type

* Remove old extension shims

* Ensure registration of modules is awaited when hydrating

* Add support for scaffolding package extensions

* Add support for building bundle extensions

* Add JsonValue type

* Use json for complex command line flags

* Load internal extensions if custom ones are not available

* Fix extension manifest validation for pack extensions

* Fix tests in shared

* Add SplitEntrypoint type

* Move command specific utils to helpers

* Add SDK version getter

* Move extension dev deps generation to helpers

* Move template path to getter util

* Move template copying to a helper

* Only rename copied template files

* Add directus-extension add command

* Convert provided extension source path to url

* Replace deprecated import.meta.globEager

* Mock URL.createObjectURL to make App unit tests pass

* Update rollup-plugin-typescript2

* indentation

* sort vite glob imported modules

* fix unintentional wrong commit

* Simplify app extension import logic

* reinstall @rollup/plugin-virtual

* add test for getInterfaces() expected sort order

Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
Co-authored-by: Azri Kahar <42867097+azrikahar@users.noreply.github.com>
2022-11-16 11:28:52 -05:00
Azri Kahar
0859102a61 sanitize comment-input (#16471) 2022-11-16 10:31:57 -05:00
Nitwel
25c6248b0a add editsGuard to drawerItem (#16375)
Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
2022-11-09 07:31:55 -08:00
Connor
1948ea09ce Update public-view.vue (#16078)
Fix Root URL for Background Image on Public Page
2022-10-20 10:18:43 -04:00
Azri Kahar
dc7c62f0ef Allow triggering manual flow without selection(s) (#15977)
* allow running manual flow without selection

* test for flows store

* update no items selected tooltip
2022-10-14 21:47:54 -04:00
Azri Kahar
37b1e99ed8 Remove handleObject default in render-template (#15999) 2022-10-14 19:29:40 -04:00
Nitwel
413d21fe4b treat empty array as null on relational field (#15958)
* treat empty array as null on relational field

* Run prettier

* add unit test

* Fix linter warnings

Co-authored-by: rijkvanzanten <rijkvanzanten@me.com>
2022-10-14 18:38:53 +00:00
Andrey Trubay
50859f852c Fix thumbnails not displaying in Files interface (#15736)
* Fix thumbs displaying in Files interface

* Use default field value if field exists but its value is undefined

Co-authored-by: Brainslug <br41nslug@users.noreply.github.com>
2022-10-12 11:49:10 +02:00
Brainslug
69797776f1 Add fallback message when no fields are visible in a form (#14778)
* Add fallback page when no fields are visible in a form

* fixed spacing for the linter

* properly show empty form message for relational drawer items

Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
2022-09-24 18:53:34 +00:00
Vincent Kempers
42261e5fa4 checking if there is a text or an error (#15579) 2022-09-15 11:36:57 +08:00
ian
551f1d82b4 Fix display dimensions of SVG in image edit drawer (#15463) 2022-09-12 21:49:22 -04:00
GBSTR
8c53346126 fix autofocus (#15450)
Co-authored-by: dev name <devn@brainpop.com>
2022-09-09 15:12:05 +08:00
ian
67ca1c266f Merge with M2M junction value when validating in drawer-item (#15433)
* Merge with M2M junction value when validating in drawer-item

* Simplify for null values

* Clear validation error messages on save
2022-09-06 14:14:50 -04:00
Azri Kahar
f087b3e43c Fix drawer item empty form for o2m/treeview (#15413) 2022-09-06 10:49:21 -04:00
GBSTR
213de3f5c6 fix divider not showing/ showing when not needed (drawer-item) (#14605)
* fix form divider when opened from drawer item

* remove redundant functions

* change back the form order to what is was

* add the option to swap between relation fields and junction fields

* fix language

* added m2m options as dropdown with more abilities

* remove the hide options and put off instead

* remove the off option from m2m junctionFieldLocation

Co-authored-by: Gabriel Shtenberg <gabriels@brainpop.com>
Co-authored-by: dev name <devn@brainpop.com>
2022-09-05 16:23:44 +02:00
ian
6be7e8f83b Merge with existing item when validating in drawer-item (#15386) 2022-09-04 11:54:24 +02:00
ian
8f7d2f8c5d Set limit as -1 for local exports when field is cleared (#15385) 2022-09-03 15:45:38 -04:00
Nitwel
5fe28db539 Add Components Package (#15094)
* move components without dependencies to packages

* make every components use vue script setup

* move components and utils from shared to @directus/components

* fix imports

* move over some more components

* get rid of unnecessary isEmpty and notEmpty

* move pagination

* fix missing !

* move groupable components

* move text-overflow and useElementSize

* fix icons not being shown

* add first unit tests

* remove capitalizeFirst

* simple cleanup

* add css-var unit test

* move over most other components

* make every component use script setup

* add some more unit tests

* add more tests and burn v-switch to the ground. 🔥

* add checkbox tests

* start with next test

* add storybook

* add more pages to storybook

* add final stories

* fix stories actions

* improve action fix

* cleaning props and adding tests

* unit tests -.-

* add some documentation to components

* Add docs to each prop

* clean storybook paths

* add more unit tests

* apply v-select fix

* update lock file

* small tweaks

* move back to shared

* fix imports

* fix imports

* cleaning

* stories to typescript

* Fix version number

Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
2022-09-01 16:07:31 -04:00
Brainslug
5915fa9f2b prevent sending "+" as primary key for newly created relational items (#15352) 2022-09-01 13:57:43 +02:00