pubsweet issueshttps://gitlab.coko.foundation/pubsweet/pubsweet/-/issues2017-12-06T12:20:12Zhttps://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/26Consider moving `authsome` and `validations` config to standalone modules2017-12-06T12:20:12ZAlf EatonConsider moving `authsome` and `validations` config to standalone modulesIn the course of upgrading Joi to v13, something triggered an error in `node-config`:
```
RangeError: Maximum call stack size exceeded
at Config.Object.<anonymous>.util.attachProtoDeep (node_modules/config/lib/config.js:109...In the course of upgrading Joi to v13, something triggered an error in `node-config`:
```
RangeError: Maximum call stack size exceeded
at Config.Object.<anonymous>.util.attachProtoDeep (node_modules/config/lib/config.js:1094:32)
```
The recommendation is that the app config should only contain settings that easily serialize to JSON.
Perhaps `authsome-mode-*` and `pubsweet-validations-*` (e.g. `authsome-mode-book` and `pubsweet-validations-core`) would make sense as modules that could be imported where needed?https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/33Proxying as another user2019-02-15T09:38:50ZYannis BarlasProxying as another userMentioned as a feature request by @mynameissmeall in https://gitlab.coko.foundation/xpub/xpub/issues/58#note_10043.
More of a long-term production concern, but I'm sure it'll be a common one, so worth noting down.Mentioned as a feature request by @mynameissmeall in https://gitlab.coko.foundation/xpub/xpub/issues/58#note_10043.
More of a long-term production concern, but I'm sure it'll be a common one, so worth noting down.https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/41Changes to config2018-03-09T14:48:16ZSam GalsonChanges to configSome suggestions:
- [x] Separate `joi` schemas from the rest
- [ ] validate config
- [x] configure authsome with filepath (i.e. a string) rather than module
- [ ] eliminate references to `process.env` outside of config/. Always impor...Some suggestions:
- [x] Separate `joi` schemas from the rest
- [ ] validate config
- [x] configure authsome with filepath (i.e. a string) rather than module
- [ ] eliminate references to `process.env` outside of config/. Always import from config/ instead.
Agree? Disagree?https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/45Export everything for external use from index.js2018-04-06T11:53:29ZAlf EatonExport everything for external use from index.jsModules shouldn't be importing from paths under the `src` directory, as the folder name could change. To avoid this, export everything that's for external use from index.js.Modules shouldn't be importing from paths under the `src` directory, as the folder name could change. To avoid this, export everything that's for external use from index.js.https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/48Error handling2017-12-12T01:21:38ZSam GalsonError handlingWe should comb through the code and make sure errors are being handled properly, i.e.
- not swallowed
- caught in the right place
- wrapped if necessary
The last point refers to preserving an error's original error cause if it has be...We should comb through the code and make sure errors are being handled properly, i.e.
- not swallowed
- caught in the right place
- wrapped if necessary
The last point refers to preserving an error's original error cause if it has been passed up the stack. `verror` can help with this.
The `require`s of errors can be made terser by requiring the entire directory and using object destructuring.https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/57Add tests for the server component API2018-03-09T14:48:15ZJureAdd tests for the server component APITesting that components receive what they need (access to various app.local properties, like models, authsome, passport.Testing that components receive what they need (access to various app.local properties, like models, authsome, passport.https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/63RFC: Browser support2018-03-09T14:48:16ZJureRFC: Browser supportWhich browsers should we support and test for?
Looks like React itself is going through this same issue these days: https://github.com/facebook/react/issues/9301
So far they've only said IE9+, but the issue above is suggesting a more c...Which browsers should we support and test for?
Looks like React itself is going through this same issue these days: https://github.com/facebook/react/issues/9301
So far they've only said IE9+, but the issue above is suggesting a more concrete list of browsers would be better.
Current list goes something like:
```
Definitely supported with full support:
Chrome 49 (last available on XP/Vista)
Firefox ESR
IE 11
Safari 10
Edge 14
Probably supported with full support:
Safari 7
Chrome 41 (seeing a bunch of traffic here on Windows 7, not sure why)
Probably OK not to support:
Safari 6
IE9 (not 100% sure on this)
```https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/64RFC: Make a nicer interface for Authorize2018-03-09T14:48:16ZJureRFC: Make a nicer interface for AuthorizeCurrent interface is `<Authorize operation='GET' object={{path: '/teams'}}>` which requires devs to know what endpoint of the API (the `path` bit) with what HTTP verb they want to authorise.
A proposed improvement is that devs would nee...Current interface is `<Authorize operation='GET' object={{path: '/teams'}}>` which requires devs to know what endpoint of the API (the `path` bit) with what HTTP verb they want to authorise.
A proposed improvement is that devs would need to know the name of the action they want to authorise, e.g.
```
import { getUsers } from 'actions'
<Authorize action={getUsers}>
<LinkContainer to='/manage/users'>
<NavItem>Users</NavItem>
</LinkContainer>
</Authorize>
```
And then `Authorize` (which lives in core `pubsweet-client` land) has a mapping betweeen the `getUsers` action and '`GET`', `{ path: '/users' }`.https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/69Export transpiled components2019-12-02T16:00:16ZAntony DenyerExport transpiled components## The problem
- Currently we publish PubSweet packages to npm as ES6/Next/JSX. These need to be passed through Babel before hitting the browser.
- But we don't want to pass all dependencies through babel because it's slow and some pack...## The problem
- Currently we publish PubSweet packages to npm as ES6/Next/JSX. These need to be passed through Babel before hitting the browser.
- But we don't want to pass all dependencies through babel because it's slow and some packages actually break due to `devDependencies` not being installed.
- So we craft elaborate regular expressions to match some packages and exclude others. This has lots of problems:
https://gitlab.coko.foundation/pubsweet/pubsweet-starter/merge_requests/31,
https://gitlab.coko.foundation/xpub/xpub/merge_requests/134,
https://gitlab.coko.foundation/pubsweet/pubsweet-starter/issues/9
- These regular expressions must be duplicated in most components' Jest configs too otherwise `babel-jest` will not transpile dependencies and unit tests will fail.
- It means that the babel config of each app is dependent on the babel config of every untranspiled dependency it consumes. i.e. if a component wants to add a babel plugin for a particular feature it is a breaking change as the plugin must be added to the app too (and the same applies to tests that require the component).
See below for possible partial solutions.
https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/80[login / signup] Extend login to use OAuth providers optionally2017-12-20T14:23:56ZYannis Barlas[login / signup] Extend login to use OAuth providers optionally@bogdan Can comment on the initial use case they have in mind is.@bogdan Can comment on the initial use case they have in mind is.https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/87Add unit tests for each component2017-12-20T14:27:36ZSam GalsonAdd unit tests for each componenthttps://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/92Document config entries used in each component2018-03-09T14:48:16ZRichard Smith-Unnarik@fathomlabs.ioDocument config entries used in each componenthttps://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/94Merge authentication-related components into a single component2017-12-20T14:29:53ZAlf EatonMerge authentication-related components into a single componentThe packages `Login`, `Signup`, ~~`Profile`,~~ `PasswordResetFrontend` and `PasswordResetBackend` are all interdependent, so should be merged into a single ~~`User` (or `Account`)~~ component.
~~This component would ideally provide the ...The packages `Login`, `Signup`, ~~`Profile`,~~ `PasswordResetFrontend` and `PasswordResetBackend` are all interdependent, so should be merged into a single ~~`User` (or `Account`)~~ component.
~~This component would ideally provide the `User` database entity and API endpoint, as well.~~
~~The `UsersManager` component should probably also be in there, as an admin interface.~~https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/110Move responsibilty for webpack compilation to the app?2017-12-22T17:16:14ZAlf EatonMove responsibilty for webpack compilation to the app?Currently a PubSweet app is responsible for installing `webpack-dev-middleware` and `webpack-hot-middleware`, as well as webpack plugins and most of the configuration, but `pubsweet-cli` contains the dependency for `webpack` and calls `w...Currently a PubSweet app is responsible for installing `webpack-dev-middleware` and `webpack-hot-middleware`, as well as webpack plugins and most of the configuration, but `pubsweet-cli` contains the dependency for `webpack` and calls `webpack-dev-middleware` and `webpack-hot-middleware` indirectly via a relative path to the node_modules dir. This makes it impossible for an app to upgrade webpack and difficult to keep the plugins in sync.
It would be more straightforward if everything webpack-related was handled by the app itself (or even, perhaps, if the app didn't need to do any webpack config at all).https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/117Consider separating pubsweet into pubsweet-generator and pubsweet-scripts2017-12-22T17:18:33ZAlf EatonConsider separating pubsweet into pubsweet-generator and pubsweet-scriptsThis is following the example of [create-react-app](https://github.com/facebookincubator/create-react-app), which is installed globally and generates an app when run on the command line.
The app generated by `create-react-app` contains ...This is following the example of [create-react-app](https://github.com/facebookincubator/create-react-app), which is installed globally and generates an app when run on the command line.
The app generated by `create-react-app` contains just one dev dependency (`react-scripts`) and several npm scripts which each invoke `react-scripts` to perform a certain function (`start` = start the web server, `test` = run tests, `build` = compile the app for production). The `react-scripts` package.json also contains all the dev dependencies needed for serving/testing/compiling, such as eslint, babel, etc.
If `pubsweet` was separated in this way, users could update the global generator (named `pubsweet-cli`, perhaps, or `pubsweet-generator`, possibly using [Yeoman](http://yeoman.io/) if appropriate), while keeping a specific version of the app-specific dependency (named `pubsweet-scripts`, say) installed locally.
Instead of calling `pubsweet run` to start the app, user would call `npm run`(which would call `pubsweet-scripts run`. using the version of `pubsweet-scripts` inside the app's dependencies).https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/335Improve reusability of UI components2018-03-13T11:57:09ZJureImprove reusability of UI componentsAs pointed out by @malexsan1 and @bogdan, the `<Menu><Option/></Menu>` component is hard to reuse, and so is `<AppBar></AppBar>`. It was suggested that we pass in `<Option>` as a child to the `<Menu>` component, in case you want e.g. sty...As pointed out by @malexsan1 and @bogdan, the `<Menu><Option/></Menu>` component is hard to reuse, and so is `<AppBar></AppBar>`. It was suggested that we pass in `<Option>` as a child to the `<Menu>` component, in case you want e.g. style `<Option>` differently. `<Menu>` should come with a default <Option> but possibly overriden.
`<AppBar>` should be a vessel for anything you want in the menu. We should be able to reuse both Menu and AppBar across projects.
@aanand Care to present how you imagine that happening and what the drawbacks/benefits would be?
Paging @malexsan1, @John.kopanas, @bogdan and @aanand to fill in the gaps here.Alexandru MunteanuAlexandru Munteanuhttps://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/337RFC: Organise styleguide2019-02-14T23:14:14ZSam GalsonRFC: Organise styleguideIf https://gitlab.coko.foundation/pubsweet/pubsweet/issues/336 is accepted we will have only one styleguide for all components. This will need to be better structured than it currently is. Something like this:
* Atoms
1. Input
...If https://gitlab.coko.foundation/pubsweet/pubsweet/issues/336 is accepted we will have only one styleguide for all components. This will need to be better structured than it currently is. Something like this:
* Atoms
1. Input
* Buttons
* Text
* Selects
* Radios
* etc.
2. Display
* Text
* Layout
* Modals
* Spinners
* Headings
* Tables
* etc.
* Molecules
1. File handling
* Uploads
* Attachments
2. Progress tracking
3. Navigation
* AppBar
* Pages
1. User admin
* Login
* Signup
2. Manuscript editing
The idea here is that atoms are abstract, but molecules/pages are likely to relate to specific business concerns.Documentation websitehttps://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/342Add hooks for custom CSS overrides2021-08-24T08:50:05ZSam GalsonAdd hooks for custom CSS overridesAs agreed at the PubSweetMeet (I think! someone confirm?), requirements for all components are:
* **Every** exported component should render a styled component and every child element of that component should be a styled-component
*...As agreed at the PubSweetMeet (I think! someone confirm?), requirements for all components are:
* **Every** exported component should render a styled component and every child element of that component should be a styled-component
* Every styled component (incl. children) should have a hook for custom CSS
* Overriding subcomponents of a single instance (e.g. an input's label) will be done by passing in CSS with a selector for the subcomponent (rather than wrapping with a new ThemeProvider).
* The hook looks like this, though we should consider ways to refactor similar to the `th` helper:
```
${props => props.theme.css.<package-name>.<component-name>.<subcomponent-name>}
```
* `<package-name>` is the name from package.json stripped of its prefix (@pubsweet or pubsweet-component-*)
* `<component-name>` is the exported component
* `<subcomponent-name>` is the component having the hook applied to it
Outermost components will be referenced like subcomponents, for example: `props.theme.css.ui.Form.Root`, not `props.theme.css.ui.Form`https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/349Use a grid library for UI components2018-07-31T16:30:03ZYannis BarlasUse a grid library for UI componentsAs discussed in !101, `grid-styled` is the one to use.As discussed in !101, `grid-styled` is the one to use.https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/350Warn user if database details are missing configuration2018-05-07T06:29:00ZJureWarn user if database details are missing configurationFor example, in production, the default config `pubsweet-starter` is supplied with is:
```
'pubsweet-server': {
db: {},
}
```
If you try to `setupdb` with the above config, we'll say that a db already exists and that you should...For example, in production, the default config `pubsweet-starter` is supplied with is:
```
'pubsweet-server': {
db: {},
}
```
If you try to `setupdb` with the above config, we'll say that a db already exists and that you should use `--clobber`. If you do that, it results in wanting to `DROP TABLE user`, which is the table that exists in the database automatically created for you by pg. This database is automatically connected to when more specific configuration is missing, which is something we don't want.https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/352Make components AA accessible2018-03-29T12:53:17ZSam GalsonMake components AA accessibleeLife is committed to the AA standard and my guess is (?) Coko will be too. We should probably start to build this in even when we touch components for other purposes.
What is AA? Each of the requirements listed in https://www.w3.org/TR...eLife is committed to the AA standard and my guess is (?) Coko will be too. We should probably start to build this in even when we touch components for other purposes.
What is AA? Each of the requirements listed in https://www.w3.org/TR/WCAG20/ is labelled A, AA or AAA - so it’s all the A and AA ones.
However, the standard is about to be updated with this: https://www.w3.org/TR/WCAG21/.https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/356Event subsystem (for notifications)2019-12-10T14:42:53ZTamlyn RhodesEvent subsystem (for notifications)PubSweet applications need a way to notify users when certain things occur. For example:
- Author receives an email when their manuscript is approved
- Editor receives a mobile push message when a manuscript is assigned to them
- Peer re...PubSweet applications need a way to notify users when certain things occur. For example:
- Author receives an email when their manuscript is approved
- Editor receives a mobile push message when a manuscript is assigned to them
- Peer reviewer receives a desktop notification when a new message is posted in chat
- Staff dashboard updates to show a new manuscript via a GraphQL subscription
To this end we can create an event bus which receives events from server endpoints/mutations and allows other server components to listen to these and trigger notifications as they see fit.
It's likely that this will be useful beyond just notifications. For example an audit log will be easier to understand if it is structured around user events rather than database updates.https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/365Visual regression testing for styleguide2019-02-14T23:31:10ZTamlyn RhodesVisual regression testing for styleguideThis is particularly useful to run locally when refactoring components to check that you haven't accidentally broken anything. It may not make sense to integrate into CI until the components have stabilised a bit.
I got quite far with [...This is particularly useful to run locally when refactoring components to check that you haven't accidentally broken anything. It may not make sense to integrate into CI until the components have stabilised a bit.
I got quite far with [React Styleguide Visual](https://github.com/unindented/react-styleguidist-visual) but there are a [few](https://github.com/unindented/react-styleguidist-visual/issues/13) [issues](https://github.com/unindented/react-styleguidist-visual/issues/14) to resolve.Documentation websitehttps://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/371RFC: lightweight service container2020-01-21T15:31:57ZTamlyn RhodesRFC: lightweight service container## Problem
There are a number of cross-cutting concerns which cannot easily be componentised using the current component system since they need to be used by other components without being referred to by name. So far we have:
- `email`...## Problem
There are a number of cross-cutting concerns which cannot easily be componentised using the current component system since they need to be used by other components without being referred to by name. So far we have:
- `email` - provides a way for components to send email without caring about the underlying delivery mechanism
- `auth` - components need to check authorisation without knowing which authsome mode is being used
- `logger` - components need to log stuff without knowing where it is going
- `file storage` - components need to write and read file data without knowing where it is stored
## Current solutions
Currently we are using a mixture of patterns to achieve this:
- `email` and `auth` - implement the service in a module and put a reference to the module in the app config. This leads to odd-looking code like `const mode = require(config.get('authsome.mode'))`. It's also not clear in the config which values are actually module references.
- `logger` - store the actual service in the config but create a dedicated package for it and expose a method which allows application code to replace this value at runtime and have this change affect all consumers of the service. The first part (non-serialisable objects in config) leads to problems with node-config and the second part (dedicated package per service) is a lot of repeated code.
- `file storage` - doesn't exist yet
## Proposed solution
Create a small wrapper to standardise the way we do this.
Add a section in the config:
```json
"services": {
"server": {
"email": "@pubsweet/aws-ses-mailer",
"auth": "./src/auth/mode.js",
"logger": "winston",
...
},
"client": {
"auth": "./src/auth/mode.js"
}
},
```
Then consume a service like:
```js
const services = require('pubsweet-server/src/services')
const mailer = services('email')
```
or
```js
const services = require('pubsweet-client/src/services')
const authsome = services('auth')
```https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/377Improve Signup component error messages2018-12-17T23:22:39ZJureImprove Signup component error messagesCurrently, e.g. if a user already exists, the error will be something like 'Conflict'
![image](/uploads/487548d6832eb2ed5a17847b8719ae86/image.png)
If the validation fails, it would be `Bad Request`.
We can make those error messages n...Currently, e.g. if a user already exists, the error will be something like 'Conflict'
![image](/uploads/487548d6832eb2ed5a17847b8719ae86/image.png)
If the validation fails, it would be `Bad Request`.
We can make those error messages nicer, to say things like 'A user with this username already exists', maybe at this point: https://gitlab.coko.foundation/pubsweet/pubsweet/blob/master/packages/components/Signup/Signup.jsx#L24
Inspired by #104https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/384RFC: Remove `owners` as a core concept2018-05-03T14:10:39ZJureRFC: Remove `owners` as a core conceptThe concept of Owners (e.g. the `owners` of a collection) are an app-level concern, and should be handled by app-level code.The concept of Owners (e.g. the `owners` of a collection) are an app-level concern, and should be handled by app-level code.https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/387Soft delete functionality2020-01-29T10:40:15ZAlexandros GeorgantasSoft delete functionalityA modification of the mechanism that deletes resources from the database should be implemented. To this end, a property `deleted` (or something else) should be introduced on our models which will be set to true instead of an actual delet...A modification of the mechanism that deletes resources from the database should be implemented. To this end, a property `deleted` (or something else) should be introduced on our models which will be set to true instead of an actual delete action. This is important for auditing as well as practical reasons.
An example of a practical reason is the use of SSE with Authsome. If a collection is deleted from a user all the teams associated with that collection are deleted too. This means that there is no way to check if a specific user (different from the actual actor) who was member of team of that collection should be notified for the deletion.JureJurehttps://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/406Update component's configuration to use method decided #4032020-01-29T10:51:15ZJureUpdate component's configuration to use method decided #403This is a task to rename existing core component's configuration keys to equal their package names.This is a task to rename existing core component's configuration keys to equal their package names.https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/408sharing components back to pubsweet - outcome of pubsweet meet2018-07-31T17:10:23ZJen Spencersharing components back to pubsweet - outcome of pubsweet meet## Background
At the latest pubsweet meet, there was an opportunity for each xpub team to demo their app for the other teams. These demos highlighted that many teams had created components which would be useful to share back to pubsweet ...## Background
At the latest pubsweet meet, there was an opportunity for each xpub team to demo their app for the other teams. These demos highlighted that many teams had created components which would be useful to share back to pubsweet but hadn't done so yet.
There are multiple reasons why components are not shared back to pubsweet immediately:
- Lack of awareness/visibility
- unsure whether the component is needed by anyone else or is specific to your own app
- unaware of the other use cases that exist & therefore which alternative implementations need to be supported before a component is shareable vs too context-specific
- [the Component Library](https://pubsweet.org/docs/components/library.html), which describes all pubsweet components, is out of date
- Time constraints
- creating a component for your use case takes less time than creating a generic component that works for more/all use cases, so devs often feel that a component is not 'ready'/'finished" (i.e. in a shareable state)
- delay in waiting for pubsweet's package to be published before being able to use the component in your own app - in your own repo it only needs to make it through the PR process and then its usable, whereas in pubsweet there is an extra step involved
- dependency on 2 different PR approval processes & merges (app-level & pubsweet-level) make it more attractive to build in-app _first_ and worry about sharing back later
At the pubsweet meet, we begun by tackling the lack of awareness / visibility issue.
## Problem - lack of awareness
1. We can search through pubsweet's styleguidist, to see if a React component has already been created, but we can't see if the component we want has already been created by another xpub team.
2. Need a common record of all pubsweet components which remains up to date with the codebase(s)
3. Discussions about component design/implementation are split across the design repo & the pubsweet repo. We don't have a clear way of collaborating on ideas for components & a lack of documentation means that people follow different processes.
4. We don't know each others' contexts well enough to design components that are reusable within each other's apps.
## Solution - greater visibility
1. Create a single source of truth for all components across pubsweet & the various xpub apps
- [x] Immediate: The working group has compiled a [list of existing components that aren't in pubsweet](https://gitlab.coko.foundation/pubsweet/pubsweet/wikis/list-of-components)
- [ ] Short term: Each team adds `styleguidist` to their project if they haven't already, deploys it for other teams to browse & adds the link to [the List of components wiki](https://gitlab.coko.foundation/pubsweet/pubsweet/wikis/list-of-components)
- [x] eLife
- [ ] Hindawi
- [ ] Europe PMC
- [ ] Collabora
- [ ] Long term: We are looking into the creation of a centralised styleguidist deployment, so that teams don't need to look in multiple places. This was started by Rich on day 2: https://gitlab.coko.foundation/pubsweet/styleguide
2. Unsure how to keep Component library docs up to date. One suggestion: create markdown file next to each component & use styleguidist to show more than just UI components. Separate issue raised #409
3. When you've identified that you need to create a new component, first raise an issue on the pubsweet repo
- [ ] Working group to raise issues for each of the existing components that need to be shared back
- [ ] Create [documentation on this contribution process](https://gitlab.coko.foundation/pubsweet/pubsweet/wikis/contributing)
4. Learn each other's contexts via regular demos, which will be recorded for dissemination
- [ ] Schedule a regular time
- [ ] Decide on number of participants per team required (note: people demo-ing need to be able to explain domain context & implementation choices)
- [ ] Post recorded videos somewhere & document this location
- [ ] Each team deploy a sandbox environment of their app, for other teams to be able to click around to their hearts content & play (is this realistic/do-able?)https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/411[RFC] consolidate icon implementations - add icon SVGs to theme?2018-08-21T10:34:38ZJen Spencer[RFC] consolidate icon implementations - add icon SVGs to theme?Most xpub projects seem to be using pubsweet's `Icon` component as it is - with the icons themselves coming from `react-feather`. But eLife is using its own SVGs, so eLife has created its own `Icon` component instead of using `pubsweet`'...Most xpub projects seem to be using pubsweet's `Icon` component as it is - with the icons themselves coming from `react-feather`. But eLife is using its own SVGs, so eLife has created its own `Icon` component instead of using `pubsweet`'s one.
What do you all think of adding icons to the theme?Jen SpencerJen Spencerhttps://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/415Model components for xpub's shared data model2019-02-15T00:16:17ZJureModel components for xpub's shared data modelXpub's shared data model should be implemented as a component. There are still core features missing for that to happen (#395), but the model has been set at the PubSweet meeting this last week (July 2018) and is described here: https://...Xpub's shared data model should be implemented as a component. There are still core features missing for that to happen (#395), but the model has been set at the PubSweet meeting this last week (July 2018) and is described here: https://gitlab.coko.foundation/xpub/shared-data-model/blob/master/README.md
The following models need to be implemented in this component:
- [ ] Organization
- [ ] Journal
- [ ] AuditLog
- [x] Team
- [ ] User
- [ ] Manuscript
- [ ] ManuscriptVersion
- [ ] File
- [ ] ReviewPubSweet March 2019 Meetinghttps://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/419db-manager: This is dangerous, change it2018-08-14T11:25:49ZTamlyn Rhodesdb-manager: This is dangerous, change itWhen `db-manager` is asked to clobber the existing data, it does so by deleting all tables in the current schema in the current database.
```
if (clobber) {
logger.info('Overwriting existing database due to clobber option')
...When `db-manager` is asked to clobber the existing data, it does so by deleting all tables in the current schema in the current database.
```
if (clobber) {
logger.info('Overwriting existing database due to clobber option')
await Promise.all(
// TODO this is dangerous, change it
rows.map(row => db.query(`DROP TABLE ${row.tablename} CASCADE`)),
)
}
```
By default the current schema is `public` and the current database is that of the current user. This has a high potential for accidentally deleting data that doesn't belong to PubSweet which the developer just happened to keep in their default local Postgres database.
### Options
1. Only delete tables created by pubsweet. This requires some way to determine which tables are pubsweet's
1. Table name prefix (like wordpress does `wp_`)
2. Components export a list of their table names
2. Encourage users to create a dedicated database and warn that any other data stored in that database will be lost
3. Remove the `clobber` option and put the responsibility on the user to clear the database
I think I favour option 2, possibly combined with option 3.https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/422[xpub-edit] Cannot target main div2019-07-18T13:33:56ZYannis Barlas[xpub-edit] Cannot target main divWhen trying to style `xpub-edit` with `styled(TextEditor)`, I run into an issue where I cannot target the main `div` that is returned.
Let's say I have the following code in my app:
```
const MyEditor = styled(TextEditor)`
background:...When trying to style `xpub-edit` with `styled(TextEditor)`, I run into an issue where I cannot target the main `div` that is returned.
Let's say I have the following code in my app:
```
const MyEditor = styled(TextEditor)`
background: teal;
`
```
This will not style [the main container](https://gitlab.coko.foundation/pubsweet/pubsweet/blob/master/components/client/xpub-edit/src/components/Editor.js#L125) that is returned.
This is because the passed `className` prop is not applied to it, but to the `createEditorView` container, as seen [here](https://gitlab.coko.foundation/pubsweet/pubsweet/blob/master/components/client/xpub-edit/src/components/Editor.js#L23).
This leaves the user with no way to target the main container, or the [MenuBar](https://gitlab.coko.foundation/pubsweet/pubsweet/blob/master/components/client/xpub-edit/src/components/Editor.js#L127) with styles from outside.
I'd argue that `className` should be applied to the main container only, but whatever the solution is, it looks like the current setup is problematic.ChristosChristoshttps://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/425[tokens] Subcription reads wrong token2019-12-16T16:15:13ZYannis Barlas[tokens] Subcription reads wrong tokenSteps to reproduce:
1. Log in as a user
2. Let the token expire (might make sense to hard-set it to 5 seconds on the server)
3. Log out and log back in
4. The server starts throwing "Bad token" errors, as it is reading the token fro...Steps to reproduce:
1. Log in as a user
2. Let the token expire (might make sense to hard-set it to 5 seconds on the server)
3. Log out and log back in
4. The server starts throwing "Bad token" errors, as it is reading the token from the first login.
This essentially makes the app broken, unless the user reloads (which we cannot count on).
Steps reproducible in the latest develop branch of micropubs, but seems to be unrelated.JureJurehttps://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/426[tokens] Refresh token2019-07-18T13:03:06ZYannis Barlas[tokens] Refresh tokenWe need to handle expired tokens and provide new refresh tokens when that happens.
Currently, we can check if the `CURRENT_USER` query failed, and remove token / redirect to login.
This, however, is problematic:
* The query is most l...We need to handle expired tokens and provide new refresh tokens when that happens.
Currently, we can check if the `CURRENT_USER` query failed, and remove token / redirect to login.
This, however, is problematic:
* The query is most likely to occur at some high level component. So for the check to be done, the query needs to run.
* The query needs to be set to never read the cache for getting the current user. If it does read the cache, the app risks returning a current user without validating the token.
* If the token expires while a user has an open page for a while, tasks can fail without being logged out. For example, if a user is writing a review, and in the meantime the token expires, hitting the "Submit" button will fail, as would any request with an invalid token. However, the current user query is not re-run at that point, and the user will most likely lose their work.
* There is redundant code that needs to be written to handle these cases.JureJurehttps://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/431RFC: Add cron-based job scheduling to server2020-01-10T11:25:12ZJureRFC: Add cron-based job scheduling to serverWe could abstract `node-schedule` in our jobs API, and use it as indicated here by the author of `pg-boss` (https://github.com/timgit/pg-boss/issues/94#issuecomment-430852430) to provide a cron-like repeated-job interface.
There are a l...We could abstract `node-schedule` in our jobs API, and use it as indicated here by the author of `pg-boss` (https://github.com/timgit/pg-boss/issues/94#issuecomment-430852430) to provide a cron-like repeated-job interface.
There are a lot of use cases for repeated/scheduled jobs, in addition to the capabilities that `pg-boss` gives us for delayed processing: https://github.com/node-schedule/node-schedule
Are people interested in that? I know that Hindawi has some use cases, but there will surely be others.
Anyone want to take on the implementation of it too? :) @bogdan, @sebastian?https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/435Send email verification on signup2019-12-10T14:42:52ZYannis BarlasSend email verification on signupSend an email verification token to the user on signup.
They should then be sent to a new page informing them if the verification has been successful or not, as well as providing a link to continue to a custom link (eg. dashboard).Send an email verification token to the user on signup.
They should then be sent to a new page informing them if the verification has been successful or not, as well as providing a link to continue to a custom link (eg. dashboard).JureJurehttps://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/440[xpub-edit] paragraph breaks are not captured correctly2019-02-19T10:55:42ZPeter Hooper[xpub-edit] paragraph breaks are not captured correctlyFrom Giuliano Maciocci
> Can we investigate why paragraph breaks are not captured correctly by the cover letter editor on paste?
seems to ignore consecutive line breaks and only retains the first one.
Hotjar feedback from the elife-xpu...From Giuliano Maciocci
> Can we investigate why paragraph breaks are not captured correctly by the cover letter editor on paste?
seems to ignore consecutive line breaks and only retains the first one.
Hotjar feedback from the elife-xpub application shows that users are pasting their cover letter and then having to re-enter the double-line spacing between the paragraphs.https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/442RFC Authsome2019-04-03T11:21:45ZYannis BarlasRFC AuthsomeOpening a discussion about how authsome modes could potentially be easier and smaller.
Here's the basic ideas:
#### On the server
**The problem:**
* Every operation inside a resolver will pass through the authsome mode. This results...Opening a discussion about how authsome modes could potentially be easier and smaller.
Here's the basic ideas:
#### On the server
**The problem:**
* Every operation inside a resolver will pass through the authsome mode. This results in a lot of operations. eg. If inside my resolver, I need to get a book, then get all the divisions for that book and patch one of them, my mode will check if I have permission to read books, if I have permission to read divisions, then if I have permission to update divisions. Each of these could potentially be repeating calls (eg. get this user's teams, check if team A is one of them etc.). I also need to go back to the authsome mode for every operation I write.
* Connectors have a different api to objection, making writing code confusing some times, or even worse, somewhat limited compared to all operations that one can do in objection.
* A workaround for the above would be to use objection whenever I don't care about authorizing and use connectors whenever I do (eg. only use connectors for the update). But this results in the use of two different apis (objection & connectors) in the same resolver, which is less than ideal, and perhaps too easy to miss.
**The proposal:**
* The server can become the only source of truth for authorization.
* There can be a one-to-one relationship between resolvers and entries to the auth mode. Given the example above, the only thing I need to check is if the user has permission to run "UPDATE_DIVISION" or not. This runs once.
* Each resolver can start with an auth service call. Even better, graphql middleware can be capturing that this resolver is about to be called (or has just been called -- useful for filtering results).
* Each auth entry in this setup only requires `(operation, context)` as arguments (eg. `UPDATE_DIVISION, ctx`). The user id is provided by the context, and the object is irrelevant in this setup.
* We can expose all actual models - not connectors - in the context. In this way, both resolvers and the authsome mode have full access to whatever they can possibly need from the data. An alternative would be to not pass them, but simply import them. Though I'd personally prefer having them in the context, minimizing imports, if someone were to use the alternative approach, they wouldn't be missing out on anything, as authorization wouldn't be bound to connectors.
* Every time team membership changes, publish the change through a subscription, filtering who gets that change (ie. a client should only get results relevant to the currently logged in user).
#### On the client
**The problem:**
* Wrapping components with `Authorize` will request permission from the cache on _every render_ of the surrounding component, which can end up being a lot of times, even if nothing has changed authorization-wise. This can have a significant performance impact.
* Complex authorization requests can be hard to reason about when using `Authorize`, potentially leading to two or more nested ones.
* Wrapping components with `Authorize` reduces reusability, as we're kind of hard-coding authorization inside the UI (including which operation of the mode to look up). This is probably not a problem for small components, but can definitely become an issue for medium-sized UI elements.
**The proposal:**
* Client-side we only get one auth object on login (mostly booleans, but could be whatever is needed). Whenever the values change on the server, this object gets updated through the aforementioned subscription.
* Since the auth values are given by the server, there is no need to worry about sensitive data being sent to the client for authorization. A result does not need to be limited by the contents of `user.teams`, the server has access to all teams.
There is no reason that I can think of that would make any of the above break backward compatibility.
It can also be implemented incrementally, instead of doing all of the above at once.
But it would IMHO end up with modes that are smaller and easier to reason about.https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/445The examples in PubSweet docs should be copy-pasteable2019-04-09T08:53:35ZJureThe examples in PubSweet docs should be copy-pasteableYou should be able to copy and past the example of a component's use, and have it 'just work'
For example, the Link component includes this example:
```
<Link to={'www.google.com'}>Click here</Link>
```
It should be:
```
import { Link ...You should be able to copy and past the example of a component's use, and have it 'just work'
For example, the Link component includes this example:
```
<Link to={'www.google.com'}>Click here</Link>
```
It should be:
```
import { Link } from '@pubsweet/ui'
<Link to={'www.google.com'}>Click here</Link>
```https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/446Reevaluate mailer config2019-05-21T09:32:05ZJureReevaluate mailer confighttps://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/451Replace prompt with https://www.npmjs.com/package/inquirer2019-07-14T12:59:37ZJureReplace prompt with https://www.npmjs.com/package/inquirerPrompt has been abandoned and we're using a git hash to specify the dependency. Inquirer seems similar, but active and popular.Prompt has been abandoned and we're using a git hash to specify the dependency. Inquirer seems similar, but active and popular.https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/452Documentation errors2019-08-08T10:35:36ZsagefrightDocumentation errors**Overview**
Documentationhas the following issues:
* Xpub components do not render (see screenshot)
* HTTPS is not enabled.
* Fonts not rendering properly (see screenshot)
**Steps To Reproduce**
Navigate to http://pubsweet.coko.fou...**Overview**
Documentationhas the following issues:
* Xpub components do not render (see screenshot)
* HTTPS is not enabled.
* Fonts not rendering properly (see screenshot)
**Steps To Reproduce**
Navigate to http://pubsweet.coko.foundation/#/Component%20library?id=editoritem
**Expected behavior**
* Components should render and not say "Your component is broken!"
* Fonts should render to display componenets in a nicer way
* The site should load on HTTPS
...
**Screenshots**
Components not rendering:
![PubSweet](/uploads/d8f5687ceaf202623a4df64d166dd743/PubSweet.jpg)
Fonts not rendering:
![PubSweet_and_Ian_Mulvany___Microsoft_Teams](/uploads/88f7b7f62365a80ea4c67585f0a6a7a3/PubSweet_and_Ian_Mulvany___Microsoft_Teams.jpg)
**Device, Operating System and Browser**
* Macbook Pro
* macOS Mojave
* Firefox 68https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/456Discuss docker best practices2019-08-30T09:30:27ZJavier Ariasjavi@openbookpublishers.comDiscuss docker best practicesIdeally Dockerfiles are able to bring an application up from zero to production. At present a single image is not able to start a pubsweet app since it requires to set the database (`yarn setupdb`) before running the server (`yarn server...Ideally Dockerfiles are able to bring an application up from zero to production. At present a single image is not able to start a pubsweet app since it requires to set the database (`yarn setupdb`) before running the server (`yarn server`) - and both commands need to be triggered at run time (i.e. the `CMD` statement in the Dockerfile), effectively requiring two separate images (one for setup and one for running).
There are two solutions I can think of:
* Make `yarn server` check that the database exists and automatically run `setupdb` otherwise.
* Create and [`entrypoint.sh`](https://docs.docker.com/engine/reference/builder/) file that checks the database and runs `setupdb`, and then keep `CMD ["yarn", "server"]` as the main command in docker.https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/463Authorise custom email adresses on login/signup2019-11-30T14:24:40Zjulientaqjulien@coko.foundationAuthorise custom email adresses on login/signup**Describe the bug**
When creating an account using my coko.foundation adress, the app thinks the email address is not valid.
**Steps To Reproduce**
1. Create an account using `julien@coko.foundation` mail adress
**Expected behavio...**Describe the bug**
When creating an account using my coko.foundation adress, the app thinks the email address is not valid.
**Steps To Reproduce**
1. Create an account using `julien@coko.foundation` mail adress
**Expected behavior**
Using the coko.foundation adress let me create an account.
**Screenshots**
![image](/uploads/bff82c5253f131cd07a04b616666d478/image.png)
**Device, Operating System and Browser**
Mac book pro 2019, OSX 10.15, firefoxhttps://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/465RFC: Email templates2020-01-10T11:23:07ZJureRFC: Email templatesEmail is a critical component for most of apps built with PubSweet and I see a number of issues that are related to emails and email templates in one way or another: !587, #435, #433, #356, and others.
We do have a templating system dev...Email is a critical component for most of apps built with PubSweet and I see a number of issues that are related to emails and email templates in one way or another: !587, #435, #433, #356, and others.
We do have a templating system developed by Hindawi (!413), but it's not reused in all relevant parts, and the templates themselves are hard-coded, not configurable.
It is a significant task to standardise how emails are templated and sent from all core parts, so I was thinking we could use this opportunity to remove some of our custom code in favour of a popular 3rd party email templating solution, namely: https://github.com/forwardemail/email-templates https://email-templates.js.org/
In this RFC I want comments on the following plan:
- replace a large part of our email templating component with a thin wrapper around `email-templates`
- use the templating system for all components in PubSweet's core (password reset emails, signup verification, etc)
- add ability to configure templates (perhaps also in a dynamic way i.e. store templates in a database model)
I believe that a simplified (and standard) email approach will be very beneficial for everyone in the community. Let me know what you think!
Cc @andrei.cioromila, @diversemix, @yannis, @audrey.https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/474UI components should not add margins to themselves2020-03-26T13:01:01ZJureUI components should not add margins to themselvesIt's not the component's job to add margins to itself, this should be handled elsewhere.
E.g. TextField (https://gitlab.coko.foundation/pubsweet/pubsweet/blob/master/packages/ui/src/atoms/TextField.js#L9)It's not the component's job to add margins to itself, this should be handled elsewhere.
E.g. TextField (https://gitlab.coko.foundation/pubsweet/pubsweet/blob/master/packages/ui/src/atoms/TextField.js#L9)https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/476Improvement of current ui component Button2020-05-08T19:03:45ZDanjela Shehidanjelashehi@gmail.comImprovement of current ui component Button can we have some improvements on our current ui component Button
like:
* Size: to change the size of the button. You can set the value to `xs, sm, md,` or `lg`.
* Variant: prop to change the visual style of the Button. You can set t... can we have some improvements on our current ui component Button
like:
* Size: to change the size of the button. You can set the value to `xs, sm, md,` or `lg`.
* Variant: prop to change the visual style of the Button. You can set the value to solid (which is similar to primary but pubsweet ofers only blue background), ghost, outline, or link (which already is secondary )
* Variant Color: prop to change the color of the text of the button
* Loading state: maybe would be good to have loading state with props like `isLoading` and `loadingText` but this is very debatable || optional
Based on our requirements in NCBI project we need Variant Prop and Button size more than two other ones , but the variant color and loading state would be good to have
ps. the naming conventions I mentioned above are based on [chakra-ui](https://chakra-ui.com/button) but we can use our own if we have other terminology for these propertiesSidorela UkuSidorela Ukuhttps://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/478Improve modal docs2020-03-31T21:09:35ZJureImprove modal docsThe docs don't show how you can use modals, i.e. what to import from where, how to use it, the example only shows the code `<Modals />`The docs don't show how you can use modals, i.e. what to import from where, how to use it, the example only shows the code `<Modals />`https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/480Upgrading to Yarn 22020-04-15T13:19:47ZJureUpgrading to Yarn 2While we will still wait a bit, it looks like yarn 2 might be better for us with its improved support for workspaces.
Meanwhile, running its `yarn doctor` to identify potential issue with the upgrade, revealed a number of interesting po...While we will still wait a bit, it looks like yarn 2 might be better for us with its improved support for workspaces.
Meanwhile, running its `yarn doctor` to identify potential issue with the upgrade, revealed a number of interesting potential dependency issues with our current codebase:
```
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/package.json
➤ YN0000: │ User scripts prefixed with "pre" or "post" (like "precommit") will not be called in sequence anymore; prefer calling prologues and epilogues explicitly
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/babel.config.js:8:41: Strings should avoid referencing the node_modules directory (prefer require.resolve)
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/client/config/default.js:3:25: Undeclared dependency on config
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/client/config/upload-validations.js:2:13: Undeclared dependency on @hapi/joi
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/package.json:16:31: Unmet transitive peer dependency on react@*, via @testing-library/react@^9.0.0
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/package.json:16:31: Unmet transitive peer dependency on react-dom@*, via @testing-library/react@^9.0.0
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/package.json:17:25: Unmet transitive peer dependency on graphql@^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0, via apollo-link-http@^1.5.16
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/package.json:22:32: Unmet transitive peer dependency on react@^16.0.0-0, via enzyme-adapter-react-16@^1.12.1
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/package.json:22:32: Unmet transitive peer dependency on react-dom@^16.0.0-0, via enzyme-adapter-react-16@^1.12.1
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/package.json:42:31: Unmet transitive peer dependency on styled-components@>= 5, via jest-styled-components@^7.0.0
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/package.json:47:28: Unmet transitive peer dependency on react@^16.13.1, via react-test-renderer@^16.12.0
➤ YN0000: └ Completed in 5.2s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/docs/package.json
➤ YN0000: │ User scripts prefixed with "pre" or "post" (like "prebuild") will not be called in sequence anymore; prefer calling prologues and epilogues explicitly
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/styleguide.config.js:204:5: Strings should avoid referencing the node_modules directory (prefer require.resolve)
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/src/webpack-config.js:20:26: Strings should avoid referencing the node_modules directory (prefer require.resolve)
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/src/webpack-config.js:49:23: Webpack configs from non-private packages should avoid referencing loaders without require.resolve
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/src/webpack-config.js:56:23: Webpack configs from non-private packages should avoid referencing loaders without require.resolve
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/src/webpack-config.js:61:23: Webpack configs from non-private packages should avoid referencing loaders without require.resolve
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/src/components/ComponentsListRenderer.js:4:1: Undeclared dependency on prop-types
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/src/components/ComponentsListRenderer.js:5:1: Undeclared dependency on clsx
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/src/components/ComponentsListRenderer.js:6:1: Undeclared dependency on rsg-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/src/components/ComponentsListRenderer.js:7:1: Undeclared dependency on rsg-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/src/components/LinkRenderer.js:4:1: Undeclared dependency on prop-types
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/src/components/LinkRenderer.js:5:1: Undeclared dependency on classnames
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/src/components/LinkRenderer.js:6:1: Undeclared dependency on rsg-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/src/components/LogoRenderer.js:4:1: Undeclared dependency on prop-types
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/src/components/LogoRenderer.js:5:1: Undeclared dependency on rsg-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/src/components/SectionRenderer.js:3:1: Undeclared dependency on prop-types
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/src/components/SectionRenderer.js:4:1: Undeclared dependency on rsg-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/src/components/SectionRenderer.js:5:1: Undeclared dependency on rsg-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/src/components/SectionRenderer.js:6:1: Undeclared dependency on rsg-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/src/components/StyleGuideRenderer.js:3:1: Undeclared dependency on prop-types
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/src/components/StyleGuideRenderer.js:4:1: Undeclared dependency on rsg-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/src/components/StyleGuideRenderer.js:5:1: Undeclared dependency on rsg-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/src/components/StyleGuideRenderer.js:6:1: Undeclared dependency on rsg-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/src/components/StyleGuideRenderer.js:7:1: Undeclared dependency on clsx
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/src/components/StyleGuideRenderer.js:8:1: Undeclared dependency on rsg-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/src/components/StyleGuideRenderer.js:9:1: Undeclared dependency on rsg-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/vendor/elife-theme/src/icons/Upload.js:4:1: Undeclared dependency on prop-types
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/vendor/elife-theme/src/icons/UploadFailure.js:4:1: Undeclared dependency on prop-types
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/vendor/elife-theme/src/icons/UploadSuccess.js:3:1: Undeclared dependency on prop-types
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/package.json:11:30: Unmet transitive peer dependency on apollo-cache-inmemory@^1.6.2, via @apollo/react-testing@^3.0.1
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/package.json:11:30: Unmet transitive peer dependency on apollo-client@^2.6.4, via @apollo/react-testing@^3.0.1
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/package.json:11:30: Unmet transitive peer dependency on apollo-link@^1.2.12, via @apollo/react-testing@^3.0.1
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/package.json:11:30: Unmet transitive peer dependency on apollo-utilities@^1.3.2, via @apollo/react-testing@^3.0.1
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/package.json:11:30: Unmet transitive peer dependency on graphql@^14.3.1, via @apollo/react-testing@^3.0.1
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/package.json:12:26: Unmet transitive peer dependency on @babel/core@^7.0.0-0, via @babel/preset-env@^7.0.0
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/package.json:13:28: Unmet transitive peer dependency on @babel/core@^7.0.0-0, via @babel/preset-react@^7.0.0
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/package.json:22:20: Unmet transitive peer dependency on graphql@^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0, via graphql-tag@^2.10.1
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/package.json:25:24: Unmet transitive peer dependency on pubsweet-server@>=13.0.0, via pubsweet-client@^10.1.0
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/package.json:34:26: Unmet transitive peer dependency on react-is@>= 16.8.0, via styled-components@^5.0.0
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/docs/package.json:37:21: Unmet transitive peer dependency on prop-types@^15.5.10, via xpub-journal@^0.0.3
➤ YN0000: └ Completed in 8.33s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/packages/base-model/package.json
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/base-model/test/extended_manuscript_graphql_test.js:16:18: Undeclared dependency on @pubsweet/models
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/base-model/test/extended_manuscript_graphql_test.js:17:22: Undeclared dependency on @pubsweet/model-user
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/base-model/test/manuscript_graphql_test.js:12:18: Undeclared dependency on @pubsweet/models
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/base-model/test/manuscript_graphql_test.js:15:22: Undeclared dependency on @pubsweet/model-user
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/base-model/test/manuscript_test.js:14:18: Undeclared dependency on @pubsweet/models
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/base-model/package.json:12:29: Unmet transitive peer dependency on @pubsweet/models@>=0.3.0, via @pubsweet/db-manager@^3.1.8
➤ YN0000: └ Completed in 0.47s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/packages/cli/package.json
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/cli/test/integration.test.js:7:15: Undeclared dependency on isomorphic-fetch
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/cli/test/integration.test.js:60:49: Strings should avoid referencing the node_modules directory (prefer require.resolve)
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/cli/package.json:13:29: Unmet transitive peer dependency on @pubsweet/models@>=0.3.0, via @pubsweet/db-manager@^3.1.8
➤ YN0000: │ Resolving prompt@flatiron/prompt#1c95d1d8d333b5fbc13fa5f0619f3dcf0d514f87 errored with Assertion failed: This resolver cannot be used unless a fetcher is configured
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/cli/package.json:25:24: Unmet transitive peer dependency on @pubsweet/model-user@>=5.0.0, via pubsweet-server@^13.10.0
➤ YN0000: └ Completed in 2.46s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/packages/client/package.json
➤ YN0000: │ User scripts prefixed with "pre" or "post" (like "prepare") will not be called in sequence anymore; prefer calling prologues and epilogues explicitly
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/index.js:3:30: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/test/jest-setup.js:1:1: Undeclared dependency on enzyme
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/test/jest-setup.js:2:1: Undeclared dependency on enzyme-adapter-react-16
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/components/AuthenticatedComponent.js:3:30: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/components/Loading.js:3:30: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/components/Loading.js:10:54: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/components/Root.js:3:30: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/components/Root.js:11:47: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/components/Root.js:13:39: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/Authorize.js:3:30: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/Authorize.js:10:40: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/Authorize.js:12:47: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/Authorize.js:14:47: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/Authorize.js:16:44: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/Authorize.js:18:58: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/Authorize.js:20:47: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/Authorize.js:22:41: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/Authorize.js:24:43: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/Authorize.js:26:49: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/AuthorizeGraphQLQueries.js:3:30: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/AuthorizeGraphQLQueries.js:10:54: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/BaseAuthorize.js:3:30: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/BaseAuthorize.js:10:47: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/BaseAuthorize.js:12:44: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/BaseAuthorize.js:14:58: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/BaseAuthorize.js:16:47: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/BaseAuthorize.js:18:41: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/StyleRoot.js:3:30: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/StyleRoot.js:10:54: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/api.js:3:30: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/endpoint.js:3:30: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/withLoader.js:3:30: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/withLoader.js:10:40: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/withLoader.js:12:56: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/withMutationState.js:3:30: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/withMutationState.js:10:47: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/withMutationState.js:12:44: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/withMutationState.js:14:54: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/withMutationState.js:16:58: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/withMutationState.js:18:47: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/withMutationState.js:20:41: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/dist/helpers/withMutationState.js:22:47: Undeclared dependency on @babel/runtime
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/test/components/Root.test.jsx:2:1: Undeclared dependency on enzyme
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/test/helpers/Authorize.test.jsx:2:1: Undeclared dependency on react-dom
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/test/helpers/Authorize.test.jsx:3:1: Undeclared dependency on enzyme
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/test/helpers/Authorize.test.jsx:4:1: Undeclared dependency on @apollo/react-testing
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/test/helpers/Authorize.test.jsx:5:1: Undeclared dependency on waait
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/test/helpers/BaseAuthorize.test.jsx:2:1: Undeclared dependency on enzyme
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/test/helpers/withLoader.test.js:2:1: Undeclared dependency on enzyme
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/test/helpers/withMutationState.test.js:2:1: Undeclared dependency on enzyme
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/package.json:8:29: Unmet transitive peer dependency on @types/react@^16.8.0, via @apollo/react-common@^3.1.3
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/package.json:9:33: Unmet transitive peer dependency on @types/react@^16.8.0, via @apollo/react-components@^3.1.3
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/package.json:9:33: Unmet transitive peer dependency on apollo-cache@^1.3.2, via @apollo/react-components@^3.1.3
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/package.json:9:33: Unmet transitive peer dependency on react-dom@^16.8.0, via @apollo/react-components@^3.1.3
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/package.json:10:26: Unmet transitive peer dependency on @types/react@^16.8.0, via @apollo/react-hoc@^3.1.3
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/package.json:10:26: Unmet transitive peer dependency on react-dom@^16.8.0, via @apollo/react-hoc@^3.1.3
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/package.json:28:26: Unmet transitive peer dependency on react-dom@>= 16.8.0, via styled-components@^5.0.0
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/client/package.json:28:26: Unmet transitive peer dependency on react-is@>= 16.8.0, via styled-components@^5.0.0
➤ YN0000: └ Completed in 4.38s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/packages/coko-theme/package.json
➤ YN0000: │ Resolving cokourier-prime-sans@git+https://gitlab.coko.foundation/julientaq/cokourier-sans-prime.git errored with Assertion failed: This resolver cannot be used unless a fetcher is configured
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/coko-theme/package.json:13:26: Unmet transitive peer dependency on react@>= 16.8.0, via styled-components@^5.0.0
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/coko-theme/package.json:13:26: Unmet transitive peer dependency on react-dom@>= 16.8.0, via styled-components@^5.0.0
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/coko-theme/package.json:13:26: Unmet transitive peer dependency on react-is@>= 16.8.0, via styled-components@^5.0.0
➤ YN0000: └ Completed in 2.32s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/packages/create-pubsweet-app/package.json
➤ YN0000: │ User scripts prefixed with "pre" or "post" (like "prerelease") will not be called in sequence anymore; prefer calling prologues and epilogues explicitly
➤ YN0000: │ User scripts prefixed with "pre" or "post" (like "prepublish") will not be called in sequence anymore; prefer calling prologues and epilogues explicitly
➤ YN0000: └ Completed in 0.19s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/packages/db-manager/package.json
➤ YN0000: └ Completed in 1.14s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/packages/default-theme/package.json
➤ YN0000: └ Completed in 2.48s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/packages/errors/package.json
➤ YN0000: └ Completed in 0.27s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/packages/jest-environment-db/package.json
➤ YN0000: └ Completed in 0.27s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/packages/logger/package.json
➤ YN0000: └ Completed in 0.29s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/packages/models/package.json
➤ YN0000: └ Completed in 0.33s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/packages/server/package.json
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/server/test/start_server_test.js:2:19: Undeclared dependency on supertest
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/server/test/graphql/subscriptions_test.js:7:19: Undeclared dependency on ws
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/server/test/graphql/subscriptions_test.js:8:26: Undeclared dependency on apollo-client
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/server/test/graphql/subscriptions_test.js:9:28: Undeclared dependency on apollo-link-http
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/server/test/graphql/subscriptions_test.js:10:27: Undeclared dependency on apollo-link-ws
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/server/test/graphql/subscriptions_test.js:11:19: Undeclared dependency on apollo-link
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/server/test/graphql/subscriptions_test.js:12:31: Undeclared dependency on apollo-utilities
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/server/test/graphql/subscriptions_test.js:13:27: Undeclared dependency on apollo-cache-inmemory
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/server/test/graphql/subscriptions_test.js:14:13: Undeclared dependency on graphql-tag
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/server/test/graphql/subscriptions_test.js:15:18: Undeclared dependency on form-data
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/server/test/graphql/subscriptions_test.js:16:15: Undeclared dependency on node-fetch
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/server/test/helpers/api.js:1:19: Undeclared dependency on supertest
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/server/package.json:11:25: Unmet transitive peer dependency on pubsweet-server@>=13.2.0, via @pubsweet/models@^0.3.8
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/server/package.json:29:18: Unmet transitive peer dependency on knex@0.x, via objection@^1.5.3
➤ YN0000: └ Completed in 4.14s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/packages/sse/package.json
➤ YN0000: └ Completed in 0.25s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/packages/theme/package.json
➤ YN0000: │ Resolving cokourier-prime-sans@git+https://gitlab.coko.foundation/julientaq/cokourier-sans-prime.git errored with Assertion failed: This resolver cannot be used unless a fetcher is configured
➤ YN0000: └ Completed in 2.14s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/packages/ui/package.json
➤ YN0000: │ User scripts prefixed with "pre" or "post" (like "prepare") will not be called in sequence anymore; prefer calling prologues and epilogues explicitly
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/AlignmentBox.test.js:3:1: Undeclared dependency on react-test-renderer
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/AlignmentBox.test.js:4:1: Undeclared dependency on jest-styled-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/AlignmentBoxWithLabel.test.js:3:1: Undeclared dependency on react-test-renderer
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/AlignmentBoxWithLabel.test.js:4:1: Undeclared dependency on jest-styled-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/AlignmentTool.test.js:3:1: Undeclared dependency on react-test-renderer
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/AlignmentTool.test.js:4:1: Undeclared dependency on jest-styled-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/AppBar.test.js:3:1: Undeclared dependency on react-test-renderer
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/AppBar.test.js:4:1: Undeclared dependency on jest-styled-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/CheckboxGroup.test.js:4:1: Undeclared dependency on react-test-renderer
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/CheckboxGroup.test.js:5:1: Undeclared dependency on jest-styled-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/Files.test.js:2:1: Undeclared dependency on react-test-renderer
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/Files.test.js:3:1: Undeclared dependency on jest-styled-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/Icon.test.js:2:1: Undeclared dependency on react-test-renderer
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/Icon.test.js:4:1: Undeclared dependency on jest-styled-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/IconButton.test.js:2:1: Undeclared dependency on react-test-renderer
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/IconButton.test.js:3:1: Undeclared dependency on jest-styled-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/Menu.test.js:2:1: Undeclared dependency on react-test-renderer
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/Menu.test.js:3:1: Undeclared dependency on jest-styled-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/Modal.test.js:2:1: Undeclared dependency on @testing-library/jest-dom
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/Modal.test.js:3:1: Undeclared dependency on @testing-library/react
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/Pagination.test.js:2:1: Undeclared dependency on @testing-library/jest-dom
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/Pagination.test.js:4:1: Undeclared dependency on @testing-library/react
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/Radio.test.js:3:1: Undeclared dependency on react-test-renderer
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/Radio.test.js:4:1: Undeclared dependency on jest-styled-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/RadioGroup.test.js:4:1: Undeclared dependency on react-test-renderer
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/RadioGroup.test.js:5:1: Undeclared dependency on jest-styled-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/Select.test.js:3:1: Undeclared dependency on react-test-renderer
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/Select.test.js:4:1: Undeclared dependency on jest-styled-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/SelectDropdown.test.js:2:1: Undeclared dependency on react-test-renderer
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/SelectDropdown.test.js:3:1: Undeclared dependency on jest-styled-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/StateItem.test.js:4:1: Undeclared dependency on jest-styled-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/StateItem.test.js:5:1: Undeclared dependency on react-test-renderer
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/StateList.test.js:4:1: Undeclared dependency on jest-styled-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/StateList.test.js:5:1: Undeclared dependency on react-test-renderer
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/Tags.test.js:2:1: Undeclared dependency on jest-styled-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/Tags.test.js:3:1: Undeclared dependency on react-test-renderer
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/YesOrNo.test.js:3:1: Undeclared dependency on react-test-renderer
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/YesOrNo.test.js:4:1: Undeclared dependency on jest-styled-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/test/setup/enzyme.js:3:1: Undeclared dependency on @testing-library/react
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui/package.json:27:26: Unmet transitive peer dependency on react-is@>= 16.8.0, via styled-components@^5.0.0
➤ YN0000: └ Completed in 1.91s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/packages/ui-toolkit/package.json
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui-toolkit/package.json:20:26: Unmet transitive peer dependency on react@>= 16.8.0, via styled-components@^5.0.0
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui-toolkit/package.json:20:26: Unmet transitive peer dependency on react-dom@>= 16.8.0, via styled-components@^5.0.0
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/ui-toolkit/package.json:20:26: Unmet transitive peer dependency on react-is@>= 16.8.0, via styled-components@^5.0.0
➤ YN0000: └ Completed in 0.36s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/components/client/component-login/package.json
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/client/component-login/test/Login.test.jsx:1:1: Undeclared dependency on enzyme
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/client/component-login/test/LoginContainer.test.jsx:2:1: Undeclared dependency on enzyme
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/client/component-login/test/LoginContainer.test.jsx:3:1: Undeclared dependency on @apollo/react-testing
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/client/component-login/test/LoginContainer.test.jsx:7:1: Undeclared dependency on waait
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/client/component-login/package.json:15:26: Unmet transitive peer dependency on react-dom@>= 16.8.0, via styled-components@^5.0.0
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/client/component-login/package.json:15:26: Unmet transitive peer dependency on react-is@>= 16.8.0, via styled-components@^5.0.0
➤ YN0000: └ Completed in 0.33s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/components/client/component-password-reset-client/package.json
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/client/component-password-reset-client/package.json:11:20: Unmet transitive peer dependency on graphql@^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0, via graphql-tag@^2.10.1
➤ YN0000: └ Completed in 0.28s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/components/client/component-people-picker/package.json
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/client/component-people-picker/src/PeoplePickerLogic.test.js:2:1: Undeclared dependency on enzyme
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/client/component-people-picker/src/PersonPod.test.js:2:1: Undeclared dependency on enzyme
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/client/component-people-picker/src/SearchBox.test.js:2:1: Undeclared dependency on enzyme
➤ YN0000: └ Completed in 0.23s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/components/client/component-signup/package.json
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/client/component-signup/test/Signup.test.jsx:1:1: Undeclared dependency on enzyme
➤ YN0000: └ Completed in 0.25s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/components/client/component-sortable-list/package.json
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/client/component-sortable-list/examples/Example-handle.jsx:3:1: Undeclared dependency on styled-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/client/component-sortable-list/examples/Example-handle.jsx:4:1: Undeclared dependency on @pubsweet/ui-toolkit
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/client/component-sortable-list/examples/Example-handle.jsx:5:1: Undeclared dependency on @pubsweet/ui
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/client/component-sortable-list/examples/Example.jsx:3:1: Undeclared dependency on styled-components
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/client/component-sortable-list/examples/Example.jsx:4:1: Undeclared dependency on @pubsweet/ui-toolkit
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/client/component-sortable-list/test/SortableList.test.js:3:1: Undeclared dependency on enzyme
➤ YN0000: └ Completed in 1.58s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/components/client/component-users-manager/package.json
➤ YN0000: └ Completed in 0.21s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/components/client/xpub-edit/package.json
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/client/xpub-edit/src/components/configurable/EditorOptions.test.js:2:1: Undeclared dependency on enzyme
➤ YN0000: └ Completed in 1.89s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/components/server/component-aws-s3/package.json
➤ YN0000: └ Completed in 0.66s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/components/server/component-email-templating/package.json
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/server/component-email-templating/test/HTMLTemplateService.test.js:1:23: Undeclared dependency on lodash
➤ YN0000: └ Completed in 0.28s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/components/server/component-password-reset-server/package.json
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/server/component-password-reset-server/test/password_reset_graphql_test.js:16:18: Undeclared dependency on @pubsweet/models
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/server/component-password-reset-server/test/password_reset_graphql_test.js:20:22: Undeclared dependency on @pubsweet/model-user
➤ YN0000: └ Completed in 0.22s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/components/server/component-send-email/package.json
➤ YN0000: └ Completed in 0.27s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/components/server/model-blog/package.json
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/server/model-blog/package.json:12:35: Unmet transitive peer dependency on @pubsweet/models@>=0.2.4, via @pubsweet/model-collection@^4.0.30
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/server/model-blog/package.json:12:35: Unmet transitive peer dependency on lodash@>=4.17.11, via @pubsweet/model-collection@^4.0.30
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/server/model-blog/package.json:12:35: Unmet transitive peer dependency on pubsweet-server@>=13.0.0, via @pubsweet/model-collection@^4.0.30
➤ YN0000: └ Completed in 0.21s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/components/server/job-xsweet/package.json
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/server/job-xsweet/test/standaloneXsweetTest.js:2:19: Undeclared dependency on ws
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/server/job-xsweet/test/standaloneXsweetTest.js:16:32: Undeclared dependency on subscriptions-transport-ws
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/server/job-xsweet/test/standaloneXsweetTest.js:17:20: Undeclared dependency on superagent
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/server/job-xsweet/package.json:12:29: Unmet transitive peer dependency on @pubsweet/models@>=0.3.0, via @pubsweet/db-manager@^3.1.8
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/server/job-xsweet/package.json:12:29: Unmet transitive peer dependency on config@>=3.0.1, via @pubsweet/db-manager@^3.1.8
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/server/job-xsweet/package.json:16:24: Unmet transitive peer dependency on @pubsweet/model-user@>=5.0.0, via pubsweet-server@^13.10.0
➤ YN0000: └ Completed in 1.07s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/components/server/model-blogpost/package.json
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/server/model-blogpost/package.json:12:33: Unmet transitive peer dependency on pubsweet-server@>=11.0.0, via @pubsweet/model-fragment@^3.1.13
➤ YN0000: └ Completed in 0.21s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/components/server/model-collection/package.json
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/server/model-collection/package.json:12:29: Unmet transitive peer dependency on config@>=3.0.0, via @pubsweet/base-model@^3.6.3
➤ YN0000: └ Completed in 0.21s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/components/server/model-fragment/package.json
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/server/model-fragment/test/fragment_graphql_test.js:12:22: Undeclared dependency on @pubsweet/model-user
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/server/model-fragment/test/fragment_graphql_test.js:17:16: Undeclared dependency on @pubsweet/db-manager
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/server/model-fragment/package.json:12:29: Unmet transitive peer dependency on config@>=3.0.0, via @pubsweet/base-model@^3.6.3
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/server/model-fragment/package.json:13:29: Unmet transitive peer dependency on @pubsweet/model-user@>=2.0.0, via @pubsweet/model-team@^4.0.0
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/server/model-fragment/package.json:13:29: Unmet transitive peer dependency on config@>=3.0.1, via @pubsweet/model-team@^4.0.0
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/server/model-fragment/package.json:13:29: Unmet transitive peer dependency on lodash@>=4.17.11, via @pubsweet/model-team@^4.0.0
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/server/model-fragment/package.json:14:25: Unmet transitive peer dependency on config@>=3.0.1, via @pubsweet/models@^0.3.8
➤ YN0000: └ Completed in 0.21s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/components/server/model-team/package.json
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/server/model-team/test/1548205275-move-members_test.js:12:17: Undeclared dependency on @pubsweet/db-manager
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/server/model-team/test/1548205276-simplify-object_test.js:11:17: Undeclared dependency on @pubsweet/db-manager
➤ YN0000: └ Completed in 0.22s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/components/server/model-user/package.json
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/components/server/model-user/test/1581371297-migrate-users-to-identities_test.js:9:17: Undeclared dependency on @pubsweet/db-manager
➤ YN0000: └ Completed in 1.7s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/packages/base-model/test/data-model-component/package.json
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/base-model/test/data-model-component/src/manuscript.js:32:21: Undeclared dependency on @pubsweet/model-team
➤ YN0000: └ Completed in 0.2s
➤ YN0000: ┌ /Users/juretriglav/src/pubsweet3/packages/base-model/test/extended-data-model-component/package.json
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/base-model/test/extended-data-model-component/src/graphql/index.js:12:11: Undeclared dependency on pubsweet-server
➤ YN0000: │ /Users/juretriglav/src/pubsweet3/packages/base-model/test/extended-data-model-component/src/graphql/index.js:22:11: Undeclared dependency on pubsweet-server
➤ YN0000: └ Completed in 0.21s
```https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/481xpub-edit's HtmlEditor uses componentWillMount2020-06-10T16:14:23ZJurexpub-edit's HtmlEditor uses componentWillMount```Warning: componentWillMount has been renamed, and is not recommended for use. See https://fb.me/react-unsafe-component-lifecycles for details.
* Move code with side effects to componentDidMount, and set initial state in the construct...```Warning: componentWillMount has been renamed, and is not recommended for use. See https://fb.me/react-unsafe-component-lifecycles for details.
* Move code with side effects to componentDidMount, and set initial state in the constructor.
* Rename componentWillMount to UNSAFE_componentWillMount to suppress this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.
Please update the following components: HtmlEditor```https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/483different font family for the same component2021-02-03T20:57:13ZArsen Shehidifferent font family for the same componentFirst link font family is Times New Roman, the other two are Roboto;
is this on purpose or a bug? Because I have seen it in other components too.
![image](/uploads/33d03f25b07873535277ab04b2095e8d/image.png)First link font family is Times New Roman, the other two are Roboto;
is this on purpose or a bug? Because I have seen it in other components too.
![image](/uploads/33d03f25b07873535277ab04b2095e8d/image.png)https://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/484unable to lighten a color > 100%2021-06-11T09:33:31ZBen Whitmoreunable to lighten a color > 100%The ui-toolkit's `lighten` function imposes a limit of 100% for lightening colors, but the underlying `Color.lighten` function from the `color` package allows > 100% lightening. `Color.lighten` uses a simple multiplicative approach, wher...The ui-toolkit's `lighten` function imposes a limit of 100% for lightening colors, but the underlying `Color.lighten` function from the `color` package allows > 100% lightening. `Color.lighten` uses a simple multiplicative approach, whereby a factor is applied to the color's value. So for example `#333333` lightened by 100% would be `#666666`, or lightened by 300% would be `#CCCCCC`. The most ui-toolkit lets you lighten it to is `#666666`.
The [`normalizePercent`](https://gitlab.coko.foundation/pubsweet/pubsweet/-/blob/master/packages/ui-toolkit/src/darkenLighten.js#L27) function treats any `num` > 100 as a straightforward factor, rather than a percentage, making it impossible to specify a factor > 1.0 and <= 100. Pass `101` as the number and it is interpreted as 10100%. I recommend removing the upper bound check on `num` so that e.g. `101` is treated as 101%.
For some purposes, `lighten` may not be ideal anyway. E.g., to turn a supplied branding color into a background-color, you may want to lighten it to ensure there is sufficient contrast against the text; but without knowing what color you are lightening you won't know whether the result will be light (perhaps even clipping to white) or dark. Black is not changed at all by `lighten`! I find the following more useful:
```
function lightenTowardWhite(color, ratio) {
const lightness = color.lightness();
return color.lightness(lightness + (100 - lightness) * ratio);
}
```
Not sure of the best naming, but this ensures that e.g. lightening by 50% will give a color at least as light as mid-gray, but not clipped to white.
This is really a separate issue, but I mention it here as related.Yannis BarlasYannis Barlashttps://gitlab.coko.foundation/pubsweet/pubsweet/-/issues/485Inconsistency for developers using M1 Mac2022-08-02T15:44:29ZRyan Dix-PeekInconsistency for developers using M1 MacThe purpose of this task is to solve the submission inconsistency for developers using M1 Mac by rebuilding the `pubsweet/job-xsweet:1.5.4` image to support arm64.
See reference; https://gitlab.coko.foundation/kotahi/kotahi/-/issues/937The purpose of this task is to solve the submission inconsistency for developers using M1 Mac by rebuilding the `pubsweet/job-xsweet:1.5.4` image to support arm64.
See reference; https://gitlab.coko.foundation/kotahi/kotahi/-/issues/937