)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"0d755129f83a00e3b5fe424f275c4ec934323bb8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":41,"id":"da2b7568_b70a35cf","updated":"2021-10-27 16:27:22.000000000","message":"recheck","commit_id":"96093b3c8683521f4fd65846d587bf982ae21ecd"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"83ee32fd494a94a17340ccf23f493a815832a0d3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":41,"id":"f7817c21_cecfee5d","updated":"2021-10-28 11:20:57.000000000","message":"recheck","commit_id":"96093b3c8683521f4fd65846d587bf982ae21ecd"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"7cca59fc2f4ab3918e0364354100e31eebc11b4a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":42,"id":"82f82e84_79f66300","updated":"2021-11-03 22:22:23.000000000","message":"PS42 ensures callback redirection works when serving the GUI under a subdirectory.","commit_id":"f42c35fee3a04cec06630ceb0e8b1fd64baab960"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"c86dbaaddec15d368a43db770dfa2c9d215aba70","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":46,"id":"5c5dac5c_06e3ba4f","updated":"2021-11-10 11:54:41.000000000","message":"recheck","commit_id":"14588574f652b308c9662372ec9aed13c40f5703"}],"doc/source/howtos/openid-connect-examples.rst":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3dbd4695e9e357c7e15b4fe03aecdfa031133173","unresolved":false,"context_lines":[{"line_number":18,"context_line":"* Make sure your configuration is correct, especially callback URIs."},{"line_number":19,"context_line":"* more information can be found in Zuul\u0027s web service logs."},{"line_number":20,"context_line":"* From the user\u0027s side, activating the web console in the browser can be helpful"},{"line_number":21,"context_line":"to debug API calls."}],"source_content_type":"text/x-rst","patch_set":6,"id":"ff570b3c_d90ba128","line":21,"updated":"2020-06-11 18:17:38.000000000","message":"docs: Bullet list ends without a blank line; unexpected unindent.","commit_id":"2072b1e4f71fe512cffdfcb5680d3b8e7beb240d"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8f290cc327582b91ed5eb3d56d9b4ed193d0e9b4","unresolved":false,"context_lines":[{"line_number":18,"context_line":"* Make sure your configuration is correct, especially callback URIs."},{"line_number":19,"context_line":"* more information can be found in Zuul\u0027s web service logs."},{"line_number":20,"context_line":"* From the user\u0027s side, activating the web console in the browser can be helpful"},{"line_number":21,"context_line":"to debug API calls."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"ff570b3c_9fc90953","line":21,"updated":"2020-06-11 19:52:51.000000000","message":"docs: Bullet list ends without a blank line; unexpected unindent.","commit_id":"dcbc93a571fefb85f4b3a79c7f75645d1d5f7295"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"bac725bd37145886a845ba4178262c4fa8fa5c9a","unresolved":false,"context_lines":[{"line_number":16,"context_line":"If problems appear:"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"* Make sure your configuration is correct, especially callback URIs."},{"line_number":19,"context_line":"* more information can be found in Zuul\u0027s web service logs."},{"line_number":20,"context_line":"* From the user\u0027s side, activating the web console in the browser can be helpful"},{"line_number":21,"context_line":"  to debug API calls."}],"source_content_type":"text/x-rst","patch_set":40,"id":"db9fc053_a8931f9a","line":19,"updated":"2021-10-27 00:45:54.000000000","message":"If new patchset needed: Capitalize \u0027More\u0027","commit_id":"2dc38b62bdcf36ef581925ad11fd2815f1058978"}],"web/package.json":[{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"150badfa5a122cf45da1438e7143030bc8b5227d","unresolved":true,"context_lines":[{"line_number":30,"context_line":"    \"react-select\": \"3.1.0\","},{"line_number":31,"context_line":"    \"redux\": \"^4.0.5\","},{"line_number":32,"context_line":"    \"redux-immutable-state-invariant\": \"^2.1.0\","},{"line_number":33,"context_line":"    \"redux-oidc\": \"^4.0.0-beta1\","},{"line_number":34,"context_line":"    \"redux-thunk\": \"^2.3.0\","},{"line_number":35,"context_line":"    \"sockette\": \"^2.0.0\","},{"line_number":36,"context_line":"    \"swagger-ui\": \"^3.20.1\","}],"source_content_type":"application/json","patch_set":19,"id":"1b8c4408_6a1ec699","line":33,"updated":"2021-02-02 14:53:25.000000000","message":"Do we need this beta? I\u0027m worried a bit that this component might be abandoned. Last commit is from more than one year ago [1] and the last release is this beta. Are there alternatives we could use?\n\n[1] https://github.com/maxmantz/redux-oidc","commit_id":"d042dea06c5eb0366b19a509f9c2915d337c62f9"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"95707854c426c87618e1a5da36677e68882c28ca","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    \"react-select\": \"3.1.0\","},{"line_number":31,"context_line":"    \"redux\": \"^4.0.5\","},{"line_number":32,"context_line":"    \"redux-immutable-state-invariant\": \"^2.1.0\","},{"line_number":33,"context_line":"    \"redux-oidc\": \"^4.0.0-beta1\","},{"line_number":34,"context_line":"    \"redux-thunk\": \"^2.3.0\","},{"line_number":35,"context_line":"    \"sockette\": \"^2.0.0\","},{"line_number":36,"context_line":"    \"swagger-ui\": \"^3.20.1\","}],"source_content_type":"application/json","patch_set":19,"id":"fc9793d1_d95dd7dc","line":33,"in_reply_to":"1b8c4408_6a1ec699","updated":"2021-08-17 13:34:45.000000000","message":"As of PS33 the dependency to redux-oidc is replaced by oidc-react, which is more actively maintained. Both libraries however depend on oidc-client-js, which is looking for a new maintainer.\n\nthe oidc-react devs discuss the problem here: https://github.com/bjerkio/oidc-react/issues/652 and intend to keep maintaining oidc-react regardless of what happens.","commit_id":"d042dea06c5eb0366b19a509f9c2915d337c62f9"}],"web/src/App.jsx":[{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"bac725bd37145886a845ba4178262c4fa8fa5c9a","unresolved":false,"context_lines":[{"line_number":424,"context_line":"      \u003c/\u003e"},{"line_number":425,"context_line":"    )"},{"line_number":426,"context_line":"    return ("},{"line_number":427,"context_line":"      \u003cReact.Fragment\u003e{app}\u003c/React.Fragment\u003e"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"    )"},{"line_number":430,"context_line":"  }"}],"source_content_type":"text/jsx","patch_set":40,"id":"debcbeed_0b15ecfe","line":427,"updated":"2021-10-27 00:45:54.000000000","message":"Why this change?","commit_id":"2dc38b62bdcf36ef581925ad11fd2815f1058978"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"9c28eb659d7fad1afedf5da31d9dc8be094a6679","unresolved":false,"context_lines":[{"line_number":424,"context_line":"      \u003c/\u003e"},{"line_number":425,"context_line":"    )"},{"line_number":426,"context_line":"    return ("},{"line_number":427,"context_line":"      \u003cReact.Fragment\u003e{app}\u003c/React.Fragment\u003e"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"    )"},{"line_number":430,"context_line":"  }"}],"source_content_type":"text/jsx","patch_set":40,"id":"635d5ad9_df4acda3","line":427,"in_reply_to":"debcbeed_0b15ecfe","updated":"2021-10-27 13:39:40.000000000","message":"Looks like a remnant of attempting to use the top-level AuthProvider component. I will revert this","commit_id":"2dc38b62bdcf36ef581925ad11fd2815f1058978"}],"web/src/App.test.jsx":[{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"bac725bd37145886a845ba4178262c4fa8fa5c9a","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    })"},{"line_number":82,"context_line":"  )"},{"line_number":83,"context_line":"  api.fetchStatus.mockImplementation("},{"line_number":84,"context_line":"    () \u003d\u003e Promise.resolve({ data: { pipelines: [] } })"},{"line_number":85,"context_line":"  )"},{"line_number":86,"context_line":"  const application \u003d ReactTestUtils.renderIntoDocument("},{"line_number":87,"context_line":"    \u003cProvider store\u003d{store}\u003e\u003cRouter\u003e\u003cApp /\u003e\u003c/Router\u003e\u003c/Provider\u003e"}],"source_content_type":"text/jsx","patch_set":40,"id":"4eccff36_7bafa1e7","line":84,"updated":"2021-10-27 00:45:54.000000000","message":"Is anything in this file changed other than whitespace?  It would be better to avoid these changes to make things easier for reviewers and future maintenance (git blame, etc).","commit_id":"2dc38b62bdcf36ef581925ad11fd2815f1058978"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"9c28eb659d7fad1afedf5da31d9dc8be094a6679","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    })"},{"line_number":82,"context_line":"  )"},{"line_number":83,"context_line":"  api.fetchStatus.mockImplementation("},{"line_number":84,"context_line":"    () \u003d\u003e Promise.resolve({ data: { pipelines: [] } })"},{"line_number":85,"context_line":"  )"},{"line_number":86,"context_line":"  const application \u003d ReactTestUtils.renderIntoDocument("},{"line_number":87,"context_line":"    \u003cProvider store\u003d{store}\u003e\u003cRouter\u003e\u003cApp /\u003e\u003c/Router\u003e\u003c/Provider\u003e"}],"source_content_type":"text/jsx","patch_set":40,"id":"d89341b4_3538fa4c","line":84,"in_reply_to":"4eccff36_7bafa1e7","updated":"2021-10-27 13:39:40.000000000","message":"The woes of auto-formatting ... I\u0027ll revert in next PS","commit_id":"2dc38b62bdcf36ef581925ad11fd2815f1058978"}],"web/src/containers/auth/Auth.jsx":[{"author":{"_account_id":27952,"name":"Felix Edel","email":"felix.edel@bmw.de","username":"felix.schmidt"},"change_message_id":"2ab60e69cdee9c6711b570e33e65f67ae8ee61c3","unresolved":true,"context_lines":[{"line_number":12,"context_line":"// License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"// under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import configureStore from \u0027../../store\u0027"},{"line_number":16,"context_line":"import { OidcProvider } from \u0027redux-oidc\u0027"},{"line_number":17,"context_line":"import { loadUser } from \u0027redux-oidc\u0027"},{"line_number":18,"context_line":"import { Accordion,"}],"source_content_type":"text/jsx","patch_set":26,"id":"487d3b5e_6984cd6d","line":15,"updated":"2021-07-28 14:41:04.000000000","message":"nit: I\u0027d prefer if we could keep some kind of import order (like you usually do in python as well) and keep the classes/constants/names per import sorted alphabetically. In my changes I did something like (the comments are just here for explanation:\n\n# base imports\nimport React from \u0027react\u0027\nimport PropTypes from \u0027prop-types\u0027\nimport { connect } from \u0027react-redux\u0027\n\n# patternfly imports (first core, then everything else like icons, table, ...)\n...\n\n# other third party imports (like moment.js)\n...\n\n# local imports (everything that is referenced by a (relative) path)\n\nMaybe it would be also worth to write a small style guide for this. I know that the zuul project doesn\u0027t want to be too restrictive, but I find that this is extremely helpful - especially in JavaScript, where you usually need some time to get used to the code 😄 .","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"41facb349e36fe6166dd93bbe52a4172b82a9628","unresolved":false,"context_lines":[{"line_number":12,"context_line":"// License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"// under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import configureStore from \u0027../../store\u0027"},{"line_number":16,"context_line":"import { OidcProvider } from \u0027redux-oidc\u0027"},{"line_number":17,"context_line":"import { loadUser } from \u0027redux-oidc\u0027"},{"line_number":18,"context_line":"import { Accordion,"}],"source_content_type":"text/jsx","patch_set":26,"id":"41e216b0_8eac6347","line":15,"in_reply_to":"487d3b5e_6984cd6d","updated":"2021-08-02 13:55:17.000000000","message":"Done","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":27952,"name":"Felix Edel","email":"felix.edel@bmw.de","username":"felix.schmidt"},"change_message_id":"2ab60e69cdee9c6711b570e33e65f67ae8ee61c3","unresolved":true,"context_lines":[{"line_number":40,"context_line":"const store \u003d configureStore()"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class AuthContainer extends React.Component {"},{"line_number":44,"context_line":"    static propTypes \u003d {"},{"line_number":45,"context_line":"        userManager: PropTypes.object,"},{"line_number":46,"context_line":"        user: PropTypes.object,"}],"source_content_type":"text/jsx","patch_set":26,"id":"c9388c19_a815f62f","line":43,"updated":"2021-07-28 14:41:04.000000000","message":"Just as a general note: I\u0027d prefer to use functional components over class based components as they come with much less boilerplate code and IMHO most of their parts are easier to read and understand (especially the usage of states and props). I don\u0027t think we should update all the components in this patch as this is now open for quite some time, but if somebody wants to create new components in the future I\u0027d be glad if those are functional components 😊","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"121d54110fc40f182d6c627d97ddfb3502605a16","unresolved":false,"context_lines":[{"line_number":40,"context_line":"const store \u003d configureStore()"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class AuthContainer extends React.Component {"},{"line_number":44,"context_line":"    static propTypes \u003d {"},{"line_number":45,"context_line":"        userManager: PropTypes.object,"},{"line_number":46,"context_line":"        user: PropTypes.object,"}],"source_content_type":"text/jsx","patch_set":26,"id":"32b7e38a_21b00f50","line":43,"updated":"2021-08-02 13:17:27.000000000","message":"The rest of the web ui uses classes.  We should maintain consistency.  It\u0027s much harder for part-time JS programmers to deal with both at the same time.  If we want to change, we should discuss changing everything.\nPlease do not change this patch or stack to switch.\n\nFWIW, I personally find the opposite is true.","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"41facb349e36fe6166dd93bbe52a4172b82a9628","unresolved":false,"context_lines":[{"line_number":40,"context_line":"const store \u003d configureStore()"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class AuthContainer extends React.Component {"},{"line_number":44,"context_line":"    static propTypes \u003d {"},{"line_number":45,"context_line":"        userManager: PropTypes.object,"},{"line_number":46,"context_line":"        user: PropTypes.object,"}],"source_content_type":"text/jsx","patch_set":26,"id":"fe78d2da_c66cce5c","line":43,"in_reply_to":"15b63ebe_6b7160d2","updated":"2021-08-02 13:55:17.000000000","message":"Definitely a discussion worth having, as new React programmers will most definitely have learned to code using functional components. We don\u0027t want to make it difficult for newcomers to contribute. But I think we all agree that this is something to be decided later.","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":27952,"name":"Felix Edel","email":"felix.edel@bmw.de","username":"felix.schmidt"},"change_message_id":"d011bec9be0fc0a66235ca48ccebc6b53d44c66e","unresolved":false,"context_lines":[{"line_number":40,"context_line":"const store \u003d configureStore()"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class AuthContainer extends React.Component {"},{"line_number":44,"context_line":"    static propTypes \u003d {"},{"line_number":45,"context_line":"        userManager: PropTypes.object,"},{"line_number":46,"context_line":"        user: PropTypes.object,"}],"source_content_type":"text/jsx","patch_set":26,"id":"15b63ebe_6b7160d2","line":43,"in_reply_to":"32b7e38a_21b00f50","updated":"2021-08-02 13:39:32.000000000","message":"Like I said, I don\u0027t think we should change this stack in that regard. I\u0027m also only an \"occasional JS developer\". When I started with React, they already changed a lot to previous versions (like including the functional components) and there were quite some parts which were marked as deprecated (like the super() call in the class components constructor and AFAIK some of the lifecycle methods changed their name or were also marked as deprecated, e.g. componentWillMount).\n\nAnd from all I\u0027ve seen so far, there is clearly a trend in React to move to functional components.\n\nThe drawback with all this frontend development is clearly that it changes so fast that you can\u0027t really follow-up if you are not working full time on that. But I also think that you should not always stick to one approach because you always did it like that and that from time to time you should try to follow-up on the newer approaches and try to incorporate them. Especially for new features this is something you could do without much of a problem. I did the same when I started with the new UI and I think it was definitely not drawback to do so.","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"41facb349e36fe6166dd93bbe52a4172b82a9628","unresolved":true,"context_lines":[{"line_number":40,"context_line":"const store \u003d configureStore()"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class AuthContainer extends React.Component {"},{"line_number":44,"context_line":"    static propTypes \u003d {"},{"line_number":45,"context_line":"        userManager: PropTypes.object,"},{"line_number":46,"context_line":"        user: PropTypes.object,"}],"source_content_type":"text/jsx","patch_set":26,"id":"2e33b1e3_90e11fec","line":43,"in_reply_to":"c9388c19_a815f62f","updated":"2021-08-02 13:55:17.000000000","message":"I tried but I hit an error with setting states in two different components. It wasn\u0027t very clear ... I\u0027d rather rework this later if needed and keep it that way for now since it works as is.","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":27952,"name":"Felix Edel","email":"felix.edel@bmw.de","username":"felix.schmidt"},"change_message_id":"2ab60e69cdee9c6711b570e33e65f67ae8ee61c3","unresolved":true,"context_lines":[{"line_number":50,"context_line":"    }"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    constructor(props) {"},{"line_number":53,"context_line":"        super(props)"},{"line_number":54,"context_line":"        const { tenant } \u003d this.props"},{"line_number":55,"context_line":"        this.state \u003d {"},{"line_number":56,"context_line":"            isModalOpen: false,"}],"source_content_type":"text/jsx","patch_set":26,"id":"bdb3ab8a_c6ae18a0","line":53,"updated":"2021-07-28 14:41:04.000000000","message":"AFAIK the super() call is deprecated","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"41facb349e36fe6166dd93bbe52a4172b82a9628","unresolved":true,"context_lines":[{"line_number":50,"context_line":"    }"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    constructor(props) {"},{"line_number":53,"context_line":"        super(props)"},{"line_number":54,"context_line":"        const { tenant } \u003d this.props"},{"line_number":55,"context_line":"        this.state \u003d {"},{"line_number":56,"context_line":"            isModalOpen: false,"}],"source_content_type":"text/jsx","patch_set":26,"id":"7e1248e1_def4e4ba","line":53,"in_reply_to":"bdb3ab8a_c6ae18a0","updated":"2021-08-02 13:55:17.000000000","message":"I think an error is thrown if you try to use \"this\" in the constructor without calling super(props) first. This is going to be irrelevant once this is turned into a function anyway.","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":27952,"name":"Felix Edel","email":"felix.edel@bmw.de","username":"felix.schmidt"},"change_message_id":"2ab60e69cdee9c6711b570e33e65f67ae8ee61c3","unresolved":true,"context_lines":[{"line_number":92,"context_line":"                        variant\u003d\"primary\""},{"line_number":93,"context_line":"                        onClick\u003d{() \u003d\u003e { this.props.dispatch(userLoggingOut(userManager)) }}\u003e"},{"line_number":94,"context_line":"                      Sign Out \u0026nbsp;"},{"line_number":95,"context_line":"                      \u003cSignOutAltIcon title\u003d\u0027Sign Out\u0027 /\u003e"},{"line_number":96,"context_line":"                    \u003c/Button\u003e"},{"line_number":97,"context_line":"                ]}"},{"line_number":98,"context_line":"            \u003e"}],"source_content_type":"text/jsx","patch_set":26,"id":"134e4c7a_8fad6d4e","line":95,"updated":"2021-07-28 14:41:04.000000000","message":"nit: I would place the icon in front of the text, so it\u0027s similar to most of the icons we use. But maybe that\u0027s only me and the typical \"sign out\" button has the icon placed behind the text 😄","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"41facb349e36fe6166dd93bbe52a4172b82a9628","unresolved":true,"context_lines":[{"line_number":92,"context_line":"                        variant\u003d\"primary\""},{"line_number":93,"context_line":"                        onClick\u003d{() \u003d\u003e { this.props.dispatch(userLoggingOut(userManager)) }}\u003e"},{"line_number":94,"context_line":"                      Sign Out \u0026nbsp;"},{"line_number":95,"context_line":"                      \u003cSignOutAltIcon title\u003d\u0027Sign Out\u0027 /\u003e"},{"line_number":96,"context_line":"                    \u003c/Button\u003e"},{"line_number":97,"context_line":"                ]}"},{"line_number":98,"context_line":"            \u003e"}],"source_content_type":"text/jsx","patch_set":26,"id":"a4cbf276_cf39a4f8","line":95,"in_reply_to":"134e4c7a_8fad6d4e","updated":"2021-08-02 13:55:17.000000000","message":"It\u0027s a valid UX discussion. I\u0027ve checked a few interfaces (github, gerrit, gmail, ...) and it turns out \"sign out\" buttons usually don\u0027t have icons (and are hidden so that people tend to forget logging out, making it easier for these apps to track you, but it\u0027s a whole other subject). So I am fine with actually removing it.","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":27952,"name":"Felix Edel","email":"felix.edel@bmw.de","username":"felix.schmidt"},"change_message_id":"2ab60e69cdee9c6711b570e33e65f67ae8ee61c3","unresolved":true,"context_lines":[{"line_number":103,"context_line":"                    \u003cHatWizardIcon title\u003d\u0027This user can perform admin tasks\u0027 /\u003e"},{"line_number":104,"context_line":"                )}\u003c/p\u003e"},{"line_number":105,"context_line":"                \u003cp key\u003d\"token\"\u003e"},{"line_number":106,"context_line":"                    \u003cAccordion asDefinitionList\u003e"},{"line_number":107,"context_line":"                        \u003cAccordionItem\u003e"},{"line_number":108,"context_line":"                            \u003cAccordionToggle"},{"line_number":109,"context_line":"                              onClick\u003d{this.handleTokenToggle}"}],"source_content_type":"text/jsx","patch_set":26,"id":"2b4e16e4_cc23216d","line":106,"updated":"2021-07-28 14:41:04.000000000","message":"Although this renders nicely in (I\u0027d assume all) modern browsers, it gives some nasty exceptions in the console log because a \u003cdl\u003e or \u003cdiv\u003e cannot be part of a \u003cp\u003e.\n\nOne solution to this would be to use \u003cdiv\u003e tags instead of \u003cp\u003e and take care of the padding/margin via styling/CSS. Another solution could be something like the \"About modal\" example (which is using a grid) https://www.patternfly.org/v4/components/about-modal","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":27952,"name":"Felix Edel","email":"felix.edel@bmw.de","username":"felix.schmidt"},"change_message_id":"69b1e6fce3d02c00b0914318ac2ac86a8cd4b522","unresolved":true,"context_lines":[{"line_number":110,"context_line":"                              isExpanded\u003d{showToken}"},{"line_number":111,"context_line":"                              title\u003d\u0027Show Token\u0027"},{"line_number":112,"context_line":"                              id\u003d\"token\"\u003e"},{"line_number":113,"context_line":"                              \u003cPasteIcon"},{"line_number":114,"context_line":"                                title\u003d\u0027Copy the zuul-client command to clipboard\u0027"},{"line_number":115,"context_line":"                                onClick\u003d{() \u003d\u003e {navigator.clipboard.writeText(\u0027zuul-client --auth-token \u0027 + user.token + \u0027 --zuul-url \u0027 + apiUrl.slice(0, -4))}} /\u003e"},{"line_number":116,"context_line":"                              \u0026nbsp; User Token"}],"source_content_type":"text/jsx","patch_set":26,"id":"5344c23d_f031543d","line":113,"updated":"2021-07-29 06:10:57.000000000","message":"I wanted to suggest that we use a \"copy to clipboard\" functionality here, but I just discovered that this is already there 😊\nHowever, this wasn\u0027t obvious to me in the first place as a click on the button also expands the accordion.\nThat raised the question for me if we even need to show the token or simply change the \"Show Token\" entry to something like \"Copy zuul-client command\" that only copies the command on click (we might want to change the onClick handler to work on the whole paragraph and not just the icon).\n\nI think this depends on what the main purpose of this field should be. Do we want to show the user the token or is the copy-to-clipboard functionality more beneficially. Although I like the design with the accordion, I find that showing the token doesn\u0027t provide too much benefit, if I could simply copy it via a single click instead.\n\nIf we can\u0027t decide on that, we might also provide two actions here. One to copy the token and one to copy the zuul-client command.\n\nThis would also avoid the issue with the console errors I\u0027ve mentioned above since there would be no \u003cdiv\u003e and \u003cdl\u003e elements nested into \u003cp\u003e.","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":27952,"name":"Felix Edel","email":"felix.edel@bmw.de","username":"felix.schmidt"},"change_message_id":"e0c9732743e3e14701d581565bee5d00e7c8f0ec","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                              isExpanded\u003d{showToken}"},{"line_number":111,"context_line":"                              title\u003d\u0027Show Token\u0027"},{"line_number":112,"context_line":"                              id\u003d\"token\"\u003e"},{"line_number":113,"context_line":"                              \u003cPasteIcon"},{"line_number":114,"context_line":"                                title\u003d\u0027Copy the zuul-client command to clipboard\u0027"},{"line_number":115,"context_line":"                                onClick\u003d{() \u003d\u003e {navigator.clipboard.writeText(\u0027zuul-client --auth-token \u0027 + user.token + \u0027 --zuul-url \u0027 + apiUrl.slice(0, -4))}} /\u003e"},{"line_number":116,"context_line":"                              \u0026nbsp; User Token"}],"source_content_type":"text/jsx","patch_set":26,"id":"d486bcad_56204f19","line":113,"in_reply_to":"4d41fee6_d00dcae5","updated":"2021-08-03 06:34:59.000000000","message":"Then it might be a good idea to start with only the \"copy zuul-client command to clipboard\" (without showing the token). This would avoid the warnings in the console and we can simply add more functionality (like downloading/copying) a whole client.conf file.\n\nRegarding the life time of the tokens: Is that something we want to address later on? This feels a little like the \"copy login command\" functionality from OpenShift (which I use quite often), but there the token is valid for ~1 day. Providing such a functionality for short-lived tokens (~10 mins if I\u0027m not mistaken), would result in a lot of copy-and-paste which feels a little inconvenient.","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"41facb349e36fe6166dd93bbe52a4172b82a9628","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                              isExpanded\u003d{showToken}"},{"line_number":111,"context_line":"                              title\u003d\u0027Show Token\u0027"},{"line_number":112,"context_line":"                              id\u003d\"token\"\u003e"},{"line_number":113,"context_line":"                              \u003cPasteIcon"},{"line_number":114,"context_line":"                                title\u003d\u0027Copy the zuul-client command to clipboard\u0027"},{"line_number":115,"context_line":"                                onClick\u003d{() \u003d\u003e {navigator.clipboard.writeText(\u0027zuul-client --auth-token \u0027 + user.token + \u0027 --zuul-url \u0027 + apiUrl.slice(0, -4))}} /\u003e"},{"line_number":116,"context_line":"                              \u0026nbsp; User Token"}],"source_content_type":"text/jsx","patch_set":26,"id":"4d41fee6_d00dcae5","line":113,"in_reply_to":"5344c23d_f031543d","updated":"2021-08-02 13:55:17.000000000","message":"Showing the token was mostly for debugging purposes, so that I could ensure similar behaviors between the GUI and the CLI.\n\nThis should instead be reworked into a way to download a pre-written client.conf file for the tenant. Since many tokens should be expected to be short-lived, the user should be able to choose whether or not to include the current token into the config file.","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":27952,"name":"Felix Edel","email":"felix.edel@bmw.de","username":"felix.schmidt"},"change_message_id":"c09d26b0e003caf67e0856720f24db0d9169b304","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                              isExpanded\u003d{showToken}"},{"line_number":111,"context_line":"                              title\u003d\u0027Show Token\u0027"},{"line_number":112,"context_line":"                              id\u003d\"token\"\u003e"},{"line_number":113,"context_line":"                              \u003cPasteIcon"},{"line_number":114,"context_line":"                                title\u003d\u0027Copy the zuul-client command to clipboard\u0027"},{"line_number":115,"context_line":"                                onClick\u003d{() \u003d\u003e {navigator.clipboard.writeText(\u0027zuul-client --auth-token \u0027 + user.token + \u0027 --zuul-url \u0027 + apiUrl.slice(0, -4))}} /\u003e"},{"line_number":116,"context_line":"                              \u0026nbsp; User Token"}],"source_content_type":"text/jsx","patch_set":26,"id":"bdc741ba_27e3c103","line":113,"in_reply_to":"6387a98e_6e884bd3","updated":"2021-08-10 06:12:59.000000000","message":"Ok, that\u0027s fine with me. Just one thing: Could we add a `cursor: pointer` style to the PasteIcon? Otherwise it\u0027s not clear that you can click it. Or we wrap it into a button that doesn\u0027t provide any additional styling.","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"7b7e95c8f24a45ad4b6123e98d474a100bd5b8c4","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                              isExpanded\u003d{showToken}"},{"line_number":111,"context_line":"                              title\u003d\u0027Show Token\u0027"},{"line_number":112,"context_line":"                              id\u003d\"token\"\u003e"},{"line_number":113,"context_line":"                              \u003cPasteIcon"},{"line_number":114,"context_line":"                                title\u003d\u0027Copy the zuul-client command to clipboard\u0027"},{"line_number":115,"context_line":"                                onClick\u003d{() \u003d\u003e {navigator.clipboard.writeText(\u0027zuul-client --auth-token \u0027 + user.token + \u0027 --zuul-url \u0027 + apiUrl.slice(0, -4))}} /\u003e"},{"line_number":116,"context_line":"                              \u0026nbsp; User Token"}],"source_content_type":"text/jsx","patch_set":26,"id":"f6e1ea68_7cfd130a","line":113,"in_reply_to":"bdc741ba_27e3c103","updated":"2021-08-10 08:52:29.000000000","message":"I just found out there\u0027s a clipboard copy component from react, I\u0027ll use this in the next PS.","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"cca5324ee444cf499945231b7f535dd7cc8c5678","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                              isExpanded\u003d{showToken}"},{"line_number":111,"context_line":"                              title\u003d\u0027Show Token\u0027"},{"line_number":112,"context_line":"                              id\u003d\"token\"\u003e"},{"line_number":113,"context_line":"                              \u003cPasteIcon"},{"line_number":114,"context_line":"                                title\u003d\u0027Copy the zuul-client command to clipboard\u0027"},{"line_number":115,"context_line":"                                onClick\u003d{() \u003d\u003e {navigator.clipboard.writeText(\u0027zuul-client --auth-token \u0027 + user.token + \u0027 --zuul-url \u0027 + apiUrl.slice(0, -4))}} /\u003e"},{"line_number":116,"context_line":"                              \u0026nbsp; User Token"}],"source_content_type":"text/jsx","patch_set":26,"id":"6387a98e_6e884bd3","line":113,"in_reply_to":"d486bcad_56204f19","updated":"2021-08-09 11:24:11.000000000","message":"\u003e Then it might be a good idea to start with only the \"copy zuul-client command to clipboard\" (without showing the token). This would avoid the warnings in the console and we can simply add more functionality (like downloading/copying) a whole client.conf file.\n\u003e \n\nThe client configuration is between pre tags now. It doesn\u0027t seem to raise warnings in the console anymore.\n\n\u003e Regarding the life time of the tokens: Is that something we want to address later on? This feels a little like the \"copy login command\" functionality from OpenShift (which I use quite often), but there the token is valid for ~1 day. Providing such a functionality for short-lived tokens (~10 mins if I\u0027m not mistaken), would result in a lot of copy-and-paste which feels a little inconvenient.\n\nThe lifetime of tokens is set at the identity provider level. If you\u0027re using the test compose, keycloak sets tokens to be valid 15 minutes by default only. It is up to the admin of the identity provider to decide how long-lived the tokens will be, and to provide a way to hand out more permanent tokens if necessary.\n(this can be also handled by a zuul operator with `zuul create-auth-token` if a local authenticator is configured)","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"f677c984418697ec6267c9aa44e393fe28d4eaf2","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            \u003cp key\u003d\"footer\"\u003e"},{"line_number":141,"context_line":"              Zuul stores and uses information such as your username"},{"line_number":142,"context_line":"              and your email to provide some features. This data is"},{"line_number":143,"context_line":"              discarded once you log out.\u003c/p\u003e"},{"line_number":144,"context_line":"          \u003c/div\u003e"},{"line_number":145,"context_line":"        \u003c/Modal\u003e"},{"line_number":146,"context_line":"      \u003c/React.Fragment\u003e"}],"source_content_type":"text/jsx","patch_set":40,"id":"96cac5da_78132569","line":143,"updated":"2021-10-28 15:06:32.000000000","message":"Based on my limited understand, I suspect we don\u0027t need anything because the server never actually receives this data, so it\u0027s not collected.\n\nBut if the server starts logging usernames, that might make it more relevant.  But then we\u0027d look at the exclusions for required operation.\n\nHaving said that, actually just clearly saying what happens with the data isn\u0027t a bad thing, and happens to be in the spirit of the law anyway, so maybe we should keep it and just adjust it to be a little more clear?  You\u0027ve done that in a later PS, so lgtm.  :)","commit_id":"2dc38b62bdcf36ef581925ad11fd2815f1058978"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"bac725bd37145886a845ba4178262c4fa8fa5c9a","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            \u003cp key\u003d\"footer\"\u003e"},{"line_number":141,"context_line":"              Zuul stores and uses information such as your username"},{"line_number":142,"context_line":"              and your email to provide some features. This data is"},{"line_number":143,"context_line":"              discarded once you log out.\u003c/p\u003e"},{"line_number":144,"context_line":"          \u003c/div\u003e"},{"line_number":145,"context_line":"        \u003c/Modal\u003e"},{"line_number":146,"context_line":"      \u003c/React.Fragment\u003e"}],"source_content_type":"text/jsx","patch_set":40,"id":"d41f9278_6f534504","line":143,"updated":"2021-10-27 00:45:54.000000000","message":"This looks like it\u0027s gdpr related.  Have we gotten any advice that this is correct or necessary?  Or is this just being overly cautious?","commit_id":"2dc38b62bdcf36ef581925ad11fd2815f1058978"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"9c28eb659d7fad1afedf5da31d9dc8be094a6679","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            \u003cp key\u003d\"footer\"\u003e"},{"line_number":141,"context_line":"              Zuul stores and uses information such as your username"},{"line_number":142,"context_line":"              and your email to provide some features. This data is"},{"line_number":143,"context_line":"              discarded once you log out.\u003c/p\u003e"},{"line_number":144,"context_line":"          \u003c/div\u003e"},{"line_number":145,"context_line":"        \u003c/Modal\u003e"},{"line_number":146,"context_line":"      \u003c/React.Fragment\u003e"}],"source_content_type":"text/jsx","patch_set":40,"id":"be23abbf_3f75d304","line":143,"in_reply_to":"d41f9278_6f534504","updated":"2021-10-27 13:39:40.000000000","message":"Overly cautious. This should actually be reformulated to indicate that the user data is never stored server-side and only lives in the browser for the duration of the authenticated session.\n\nIf anybody knows the exact legalese, if required at all, let me know!","commit_id":"2dc38b62bdcf36ef581925ad11fd2815f1058978"}],"web/src/containers/config/Config.jsx":[{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"bac725bd37145886a845ba4178262c4fa8fa5c9a","unresolved":false,"context_lines":[{"line_number":90,"context_line":"          ]}"},{"line_number":91,"context_line":"        \u003e"},{"line_number":92,"context_line":"          \u003cdiv\u003e"},{"line_number":93,"context_line":"            \u003cp key\u003d\"info\"\u003eApplication settings are saved in browser local storage only. They are not bound to the user.\u003c/p\u003e"},{"line_number":94,"context_line":"            \u003cSwitch"},{"line_number":95,"context_line":"              key\u003d\"autoreload\""},{"line_number":96,"context_line":"              id\u003d\"autoreload\""}],"source_content_type":"text/jsx","patch_set":40,"id":"cad74c93_3b804cfc","line":93,"updated":"2021-10-27 00:45:54.000000000","message":"I agree the update to the first sentence adds some clarity, but I\u0027m not sure the second sentence does.  What do you want to convey here?","commit_id":"2dc38b62bdcf36ef581925ad11fd2815f1058978"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"f677c984418697ec6267c9aa44e393fe28d4eaf2","unresolved":false,"context_lines":[{"line_number":90,"context_line":"          ]}"},{"line_number":91,"context_line":"        \u003e"},{"line_number":92,"context_line":"          \u003cdiv\u003e"},{"line_number":93,"context_line":"            \u003cp key\u003d\"info\"\u003eApplication settings are saved in browser local storage only. They are not bound to the user.\u003c/p\u003e"},{"line_number":94,"context_line":"            \u003cSwitch"},{"line_number":95,"context_line":"              key\u003d\"autoreload\""},{"line_number":96,"context_line":"              id\u003d\"autoreload\""}],"source_content_type":"text/jsx","patch_set":40,"id":"05f2caa8_7ee7e2ee","line":93,"updated":"2021-10-28 15:06:32.000000000","message":"Thanks!","commit_id":"2dc38b62bdcf36ef581925ad11fd2815f1058978"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"9c28eb659d7fad1afedf5da31d9dc8be094a6679","unresolved":false,"context_lines":[{"line_number":90,"context_line":"          ]}"},{"line_number":91,"context_line":"        \u003e"},{"line_number":92,"context_line":"          \u003cdiv\u003e"},{"line_number":93,"context_line":"            \u003cp key\u003d\"info\"\u003eApplication settings are saved in browser local storage only. They are not bound to the user.\u003c/p\u003e"},{"line_number":94,"context_line":"            \u003cSwitch"},{"line_number":95,"context_line":"              key\u003d\"autoreload\""},{"line_number":96,"context_line":"              id\u003d\"autoreload\""}],"source_content_type":"text/jsx","patch_set":40,"id":"d0cd6f72_9e079389","line":93,"in_reply_to":"cad74c93_3b804cfc","updated":"2021-10-27 13:39:40.000000000","message":"It means that if you log in as another user on the same browser, these settings will also apply to the other user. I\u0027m updating this in next PS, let me know if it is clearer.","commit_id":"2dc38b62bdcf36ef581925ad11fd2815f1058978"}],"web/src/pages/AuthCallback.jsx":[{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"82321446bb91d5c44f27df062969a461d100c487","unresolved":true,"context_lines":[{"line_number":64,"context_line":"          () \u003d\u003e {"},{"line_number":65,"context_line":"          })"},{"line_number":66,"context_line":"      }"},{"line_number":67,"context_line":"    }"},{"line_number":68,"context_line":"  },"},{"line_number":69,"context_line":"    // providing a dependency array doesn\u0027t seem to solve the problem with multiple calls "},{"line_number":70,"context_line":"    // to useEffect() mentioned above, left as a comment for documentation"}],"source_content_type":"text/jsx","patch_set":33,"id":"2c728fbc_2e101fb9","line":67,"updated":"2021-08-17 14:27:32.000000000","message":"Could you try adding `console.log(userManagerConfig)` before the useEffect call, and in the effect add another `console.log(\"running\")`. Then you should have only one running event per userManagerConfig.","commit_id":"2e25e0485ed36ba1eca2d682f2b343fe76e1d242"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"5dc223070ff3c76be589095d937599533903a96c","unresolved":true,"context_lines":[{"line_number":64,"context_line":"          () \u003d\u003e {"},{"line_number":65,"context_line":"          })"},{"line_number":66,"context_line":"      }"},{"line_number":67,"context_line":"    }"},{"line_number":68,"context_line":"  },"},{"line_number":69,"context_line":"    // providing a dependency array doesn\u0027t seem to solve the problem with multiple calls "},{"line_number":70,"context_line":"    // to useEffect() mentioned above, left as a comment for documentation"}],"source_content_type":"text/jsx","patch_set":33,"id":"c17a47a6_3e55126a","line":67,"in_reply_to":"2c728fbc_2e101fb9","updated":"2021-08-17 15:09:14.000000000","message":"I did, but I\u0027m not sure how that would help?","commit_id":"2e25e0485ed36ba1eca2d682f2b343fe76e1d242"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"f677c984418697ec6267c9aa44e393fe28d4eaf2","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"I haven\u0027t been able to get auth working with AuthProvider so far"},{"line_number":33,"context_line":"due to redux issues. This may be nice to revisit if we ever get"},{"line_number":34,"context_line":"rid of redux."},{"line_number":35,"context_line":"*/"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"function AuthCallbackPage(prop) {"}],"source_content_type":"text/jsx","patch_set":40,"id":"0bd7635f_79716722","line":34,"updated":"2021-10-28 15:06:32.000000000","message":"Okay, I might play around with this a bit, at least so I understand it better.  It would be cool not to need this, but even if we do, this is pretty easy to follow.","commit_id":"2dc38b62bdcf36ef581925ad11fd2815f1058978"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"bac725bd37145886a845ba4178262c4fa8fa5c9a","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"I haven\u0027t been able to get auth working with AuthProvider so far"},{"line_number":33,"context_line":"due to redux issues. This may be nice to revisit if we ever get"},{"line_number":34,"context_line":"rid of redux."},{"line_number":35,"context_line":"*/"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"function AuthCallbackPage(prop) {"}],"source_content_type":"text/jsx","patch_set":40,"id":"8b83798b_7db209f4","line":34,"updated":"2021-10-27 00:45:54.000000000","message":"We have no plans to get rid of redux.  We rely on it for our state and state transitions, and we can continue to do so.\n\nIf AuthProvider did work with redux, would this file be unecessary?","commit_id":"2dc38b62bdcf36ef581925ad11fd2815f1058978"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"9c28eb659d7fad1afedf5da31d9dc8be094a6679","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"I haven\u0027t been able to get auth working with AuthProvider so far"},{"line_number":33,"context_line":"due to redux issues. This may be nice to revisit if we ever get"},{"line_number":34,"context_line":"rid of redux."},{"line_number":35,"context_line":"*/"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"function AuthCallbackPage(prop) {"}],"source_content_type":"text/jsx","patch_set":40,"id":"ddc6a138_cfeaa8bc","line":34,"in_reply_to":"8b83798b_7db209f4","updated":"2021-10-27 13:39:40.000000000","message":"I believe so. We could replace useEffect below with the onSignIn callback of the config property of AuthProvider, see https://github.com/bjerkio/oidc-react#usage","commit_id":"2dc38b62bdcf36ef581925ad11fd2815f1058978"}],"web/src/reducers/auth.js":[{"author":{"_account_id":27952,"name":"Felix Edel","email":"felix.edel@bmw.de","username":"felix.schmidt"},"change_message_id":"2ab60e69cdee9c6711b570e33e65f67ae8ee61c3","unresolved":true,"context_lines":[{"line_number":18,"context_line":"  USERMANAGER_SUCCESS,"},{"line_number":19,"context_line":"} from \u0027../actions/auth\u0027"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"export default (state \u003d {"},{"line_number":22,"context_line":"  isFetching: false,"},{"line_number":23,"context_line":"  userManager: null,"},{"line_number":24,"context_line":"  capabilities: null,"}],"source_content_type":"text/javascript","patch_set":26,"id":"ea26874f_badd2d6d","line":21,"updated":"2021-07-28 14:41:04.000000000","message":"You could put the default state into the initialState.js file. This allows us to keep all initial states in a single file and simply use them for testing as well. This file could then be changed like this:\n\nimport initialState from \u0027./initialState\u0027\n\nexport default (state \u003d initialState.build, action) \u003d\u003e {","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"41facb349e36fe6166dd93bbe52a4172b82a9628","unresolved":false,"context_lines":[{"line_number":18,"context_line":"  USERMANAGER_SUCCESS,"},{"line_number":19,"context_line":"} from \u0027../actions/auth\u0027"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"export default (state \u003d {"},{"line_number":22,"context_line":"  isFetching: false,"},{"line_number":23,"context_line":"  userManager: null,"},{"line_number":24,"context_line":"  capabilities: null,"}],"source_content_type":"text/javascript","patch_set":26,"id":"869cf824_74aeabce","line":21,"in_reply_to":"ea26874f_badd2d6d","updated":"2021-08-02 13:55:17.000000000","message":"Done","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"}],"web/src/reducers/user.js":[{"author":{"_account_id":27952,"name":"Felix Edel","email":"felix.edel@bmw.de","username":"felix.schmidt"},"change_message_id":"2ab60e69cdee9c6711b570e33e65f67ae8ee61c3","unresolved":true,"context_lines":[{"line_number":60,"context_line":"        isAdmin: false"},{"line_number":61,"context_line":"    }"},{"line_number":62,"context_line":"    case USER_ACL_REQUEST:"},{"line_number":63,"context_line":"      return update(state, {$merge: {isFetching: true}})"},{"line_number":64,"context_line":"  case USER_ACL_FAILURE:"},{"line_number":65,"context_line":"    return update(state, {$merge: {isFetching: false,"},{"line_number":66,"context_line":"                                   scope: [],"}],"source_content_type":"text/javascript","patch_set":26,"id":"6c37a623_d0356674","line":63,"updated":"2021-07-28 14:41:04.000000000","message":"I find it much easier to use the JavaScript spread operator (...) here instead of the immutability-helper. This could be simplified to:\n\nreturn { ...state, isFetching: true }\n\nThis basically says: Copy the old state dictionary and overwrite isFetching with true.\n\nYou can check out the reducers/build.js file for more complex examples (like nested dicts) if necessary.","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"41facb349e36fe6166dd93bbe52a4172b82a9628","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        isAdmin: false"},{"line_number":61,"context_line":"    }"},{"line_number":62,"context_line":"    case USER_ACL_REQUEST:"},{"line_number":63,"context_line":"      return update(state, {$merge: {isFetching: true}})"},{"line_number":64,"context_line":"  case USER_ACL_FAILURE:"},{"line_number":65,"context_line":"    return update(state, {$merge: {isFetching: false,"},{"line_number":66,"context_line":"                                   scope: [],"}],"source_content_type":"text/javascript","patch_set":26,"id":"60eb4e2d_65c12209","line":63,"in_reply_to":"6c37a623_d0356674","updated":"2021-08-02 13:55:17.000000000","message":"Done","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":27952,"name":"Felix Edel","email":"felix.edel@bmw.de","username":"felix.schmidt"},"change_message_id":"2ab60e69cdee9c6711b570e33e65f67ae8ee61c3","unresolved":true,"context_lines":[{"line_number":62,"context_line":"    case USER_ACL_REQUEST:"},{"line_number":63,"context_line":"      return update(state, {$merge: {isFetching: true}})"},{"line_number":64,"context_line":"  case USER_ACL_FAILURE:"},{"line_number":65,"context_line":"    return update(state, {$merge: {isFetching: false,"},{"line_number":66,"context_line":"                                   scope: [],"},{"line_number":67,"context_line":"                                   isAdmin: false}})"},{"line_number":68,"context_line":"  case USER_ACL_SUCCESS:"}],"source_content_type":"text/javascript","patch_set":26,"id":"7c376ccf_39c7be70","line":65,"updated":"2021-07-28 14:41:04.000000000","message":"Could be simplified to\n\nreturn { ...state, isFetching: false, scope: [], asAdmin: false }","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"41facb349e36fe6166dd93bbe52a4172b82a9628","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    case USER_ACL_REQUEST:"},{"line_number":63,"context_line":"      return update(state, {$merge: {isFetching: true}})"},{"line_number":64,"context_line":"  case USER_ACL_FAILURE:"},{"line_number":65,"context_line":"    return update(state, {$merge: {isFetching: false,"},{"line_number":66,"context_line":"                                   scope: [],"},{"line_number":67,"context_line":"                                   isAdmin: false}})"},{"line_number":68,"context_line":"  case USER_ACL_SUCCESS:"}],"source_content_type":"text/javascript","patch_set":26,"id":"942df830_69597209","line":65,"in_reply_to":"7c376ccf_39c7be70","updated":"2021-08-02 13:55:17.000000000","message":"Done","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":27952,"name":"Felix Edel","email":"felix.edel@bmw.de","username":"felix.schmidt"},"change_message_id":"2ab60e69cdee9c6711b570e33e65f67ae8ee61c3","unresolved":true,"context_lines":[{"line_number":66,"context_line":"                                   scope: [],"},{"line_number":67,"context_line":"                                   isAdmin: false}})"},{"line_number":68,"context_line":"  case USER_ACL_SUCCESS:"},{"line_number":69,"context_line":"    return update(state, {$merge: {isFetching: false,"},{"line_number":70,"context_line":"                                   scope: action.scope,"},{"line_number":71,"context_line":"                                   isAdmin: action.isAdmin}})"},{"line_number":72,"context_line":"  default:"}],"source_content_type":"text/javascript","patch_set":26,"id":"a3a27331_144bcdcc","line":69,"updated":"2021-07-28 14:41:04.000000000","message":"Could be simplified to\n\nreturn { ...state, isFetching: false, scope: action.scope, isAdmin: action.isAdmin }","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"41facb349e36fe6166dd93bbe52a4172b82a9628","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                                   scope: [],"},{"line_number":67,"context_line":"                                   isAdmin: false}})"},{"line_number":68,"context_line":"  case USER_ACL_SUCCESS:"},{"line_number":69,"context_line":"    return update(state, {$merge: {isFetching: false,"},{"line_number":70,"context_line":"                                   scope: action.scope,"},{"line_number":71,"context_line":"                                   isAdmin: action.isAdmin}})"},{"line_number":72,"context_line":"  default:"}],"source_content_type":"text/javascript","patch_set":26,"id":"a779a4e9_4c524383","line":69,"in_reply_to":"a3a27331_144bcdcc","updated":"2021-08-02 13:55:17.000000000","message":"Done","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"ca91ae730e4da1e87f402ce1507e27d62a01ebe7","unresolved":true,"context_lines":[{"line_number":34,"context_line":"      let user_stringified \u003d JSON.stringify(action.user)"},{"line_number":35,"context_line":"      localStorage.setItem(\u0027zuul_user\u0027, user_stringified)"},{"line_number":36,"context_line":"      return {"},{"line_number":37,"context_line":"        isFetching: true,"},{"line_number":38,"context_line":"        user: action.user,"},{"line_number":39,"context_line":"        token: action.token,"},{"line_number":40,"context_line":"        scope: [],"}],"source_content_type":"text/javascript","patch_set":29,"id":"fee21f2a_3767bea0","line":37,"range":{"start_line":37,"start_character":20,"end_line":37,"end_character":24},"updated":"2021-08-09 13:08:37.000000000","message":"should this be set back to false when the user logged in?","commit_id":"233b999b7e4229f065d165637dbff8b2fbf22a4c"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"1999db67115d61a0ee8fef37b0b94e12b5f33673","unresolved":false,"context_lines":[{"line_number":34,"context_line":"      let user_stringified \u003d JSON.stringify(action.user)"},{"line_number":35,"context_line":"      localStorage.setItem(\u0027zuul_user\u0027, user_stringified)"},{"line_number":36,"context_line":"      return {"},{"line_number":37,"context_line":"        isFetching: true,"},{"line_number":38,"context_line":"        user: action.user,"},{"line_number":39,"context_line":"        token: action.token,"},{"line_number":40,"context_line":"        scope: [],"}],"source_content_type":"text/javascript","patch_set":29,"id":"59b307cc_36d08056","line":37,"range":{"start_line":37,"start_character":20,"end_line":37,"end_character":24},"in_reply_to":"fee21f2a_3767bea0","updated":"2021-08-09 20:41:45.000000000","message":"Done","commit_id":"233b999b7e4229f065d165637dbff8b2fbf22a4c"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"ca91ae730e4da1e87f402ce1507e27d62a01ebe7","unresolved":true,"context_lines":[{"line_number":41,"context_line":"        isAdmin: false"},{"line_number":42,"context_line":"      }"},{"line_number":43,"context_line":"    }"},{"line_number":44,"context_line":"    case USER_IN_LOCALSTORAGE:"},{"line_number":45,"context_line":"      return {"},{"line_number":46,"context_line":"        isFetching: true,"},{"line_number":47,"context_line":"        user: action.user,"}],"source_content_type":"text/javascript","patch_set":29,"id":"d06cebb2_42c22939","line":44,"range":{"start_line":44,"start_character":9,"end_line":44,"end_character":29},"updated":"2021-08-09 13:08:37.000000000","message":"it seems like USER_IN_LOCALSTORAGE is equivalent to USER_LOGGED_IN, perhaps we could drop one of the two.","commit_id":"233b999b7e4229f065d165637dbff8b2fbf22a4c"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"1999db67115d61a0ee8fef37b0b94e12b5f33673","unresolved":true,"context_lines":[{"line_number":41,"context_line":"        isAdmin: false"},{"line_number":42,"context_line":"      }"},{"line_number":43,"context_line":"    }"},{"line_number":44,"context_line":"    case USER_IN_LOCALSTORAGE:"},{"line_number":45,"context_line":"      return {"},{"line_number":46,"context_line":"        isFetching: true,"},{"line_number":47,"context_line":"        user: action.user,"}],"source_content_type":"text/javascript","patch_set":29,"id":"91cc32e0_9b97d843","line":44,"range":{"start_line":44,"start_character":9,"end_line":44,"end_character":29},"in_reply_to":"d06cebb2_42c22939","updated":"2021-08-09 20:41:45.000000000","message":"Not exactly, in that case, we don\u0027t serialize to localStorage since that\u0027s where we get the user from (see web/src/containers/auth.jsx, line 80)","commit_id":"233b999b7e4229f065d165637dbff8b2fbf22a4c"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"ca91ae730e4da1e87f402ce1507e27d62a01ebe7","unresolved":true,"context_lines":[{"line_number":60,"context_line":"      }"},{"line_number":61,"context_line":"    case USER_ACL_REQUEST:"},{"line_number":62,"context_line":"      return { ...state, isFetching: true }"},{"line_number":63,"context_line":"    case USER_ACL_FAILURE:"},{"line_number":64,"context_line":"      return {"},{"line_number":65,"context_line":"        ...state,"},{"line_number":66,"context_line":"        isFetching: false,"}],"source_content_type":"text/javascript","patch_set":29,"id":"78f42c2e_2d873be1","line":63,"range":{"start_line":63,"start_character":9,"end_line":63,"end_character":25},"updated":"2021-08-09 13:08:37.000000000","message":"In the other reducer we use the `_FAIL` prefix for that action which is then interpreted by the error reducer to display a notification. Is there a reason not doing that here?","commit_id":"233b999b7e4229f065d165637dbff8b2fbf22a4c"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"1999db67115d61a0ee8fef37b0b94e12b5f33673","unresolved":false,"context_lines":[{"line_number":60,"context_line":"      }"},{"line_number":61,"context_line":"    case USER_ACL_REQUEST:"},{"line_number":62,"context_line":"      return { ...state, isFetching: true }"},{"line_number":63,"context_line":"    case USER_ACL_FAILURE:"},{"line_number":64,"context_line":"      return {"},{"line_number":65,"context_line":"        ...state,"},{"line_number":66,"context_line":"        isFetching: false,"}],"source_content_type":"text/javascript","patch_set":29,"id":"911fa132_6d8a84f5","line":63,"range":{"start_line":63,"start_character":9,"end_line":63,"end_character":25},"in_reply_to":"78f42c2e_2d873be1","updated":"2021-08-09 20:41:45.000000000","message":"Done, I cleaned up re. redundancies in actions/auth as well","commit_id":"233b999b7e4229f065d165637dbff8b2fbf22a4c"}],"web/src/store.dev.js":[{"author":{"_account_id":27952,"name":"Felix Edel","email":"felix.edel@bmw.de","username":"felix.schmidt"},"change_message_id":"2ab60e69cdee9c6711b570e33e65f67ae8ee61c3","unresolved":true,"context_lines":[{"line_number":32,"context_line":"        // TODO (felix): Re-enable the status.status path once we know how to"},{"line_number":33,"context_line":"        // solve the weird state mutations that are done somewhere deep within"},{"line_number":34,"context_line":"        // the logic of the status page (or its child components)."},{"line_number":35,"context_line":"        reduxImmutableStateInvariant({ ignore: [\u0027status.status\u0027, \u0027auth.userManager\u0027, \u0027user\u0027] })"},{"line_number":36,"context_line":"      )"},{"line_number":37,"context_line":"    )"},{"line_number":38,"context_line":"  )"}],"source_content_type":"text/javascript","patch_set":26,"id":"ebd9ac94_4f545859","line":35,"updated":"2021-07-28 14:41:04.000000000","message":"Is there a specific reason why we have to exclude those values here? This typically means that we do not handle the state correctly in those cases. Do we mutate their state or does this come from a third-party library?","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"ef39119232d59cbe0c56e55335277ece788cee85","unresolved":true,"context_lines":[{"line_number":32,"context_line":"        // TODO (felix): Re-enable the status.status path once we know how to"},{"line_number":33,"context_line":"        // solve the weird state mutations that are done somewhere deep within"},{"line_number":34,"context_line":"        // the logic of the status page (or its child components)."},{"line_number":35,"context_line":"        reduxImmutableStateInvariant({ ignore: [\u0027status.status\u0027, \u0027auth.userManager\u0027, \u0027user\u0027] })"},{"line_number":36,"context_line":"      )"},{"line_number":37,"context_line":"    )"},{"line_number":38,"context_line":"  )"}],"source_content_type":"text/javascript","patch_set":26,"id":"b3a406f9_1433bcd6","line":35,"in_reply_to":"54cf0d78_81f99d7b","updated":"2021-08-10 11:41:09.000000000","message":"Is the prod deployment also getting stuck? Such symptom can happen when the state is mutated in place instead of using a new record (e.g. with the spread operator). To figure what is going on, you can add a `console.log(action, state)` in the reducer.","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"41facb349e36fe6166dd93bbe52a4172b82a9628","unresolved":true,"context_lines":[{"line_number":32,"context_line":"        // TODO (felix): Re-enable the status.status path once we know how to"},{"line_number":33,"context_line":"        // solve the weird state mutations that are done somewhere deep within"},{"line_number":34,"context_line":"        // the logic of the status page (or its child components)."},{"line_number":35,"context_line":"        reduxImmutableStateInvariant({ ignore: [\u0027status.status\u0027, \u0027auth.userManager\u0027, \u0027user\u0027] })"},{"line_number":36,"context_line":"      )"},{"line_number":37,"context_line":"    )"},{"line_number":38,"context_line":"  )"}],"source_content_type":"text/javascript","patch_set":26,"id":"ff05f8b8_59b3bb22","line":35,"in_reply_to":"ebd9ac94_4f545859","updated":"2021-08-02 13:55:17.000000000","message":"it comes from the redux-oidc library.","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"1999db67115d61a0ee8fef37b0b94e12b5f33673","unresolved":true,"context_lines":[{"line_number":32,"context_line":"        // TODO (felix): Re-enable the status.status path once we know how to"},{"line_number":33,"context_line":"        // solve the weird state mutations that are done somewhere deep within"},{"line_number":34,"context_line":"        // the logic of the status page (or its child components)."},{"line_number":35,"context_line":"        reduxImmutableStateInvariant({ ignore: [\u0027status.status\u0027, \u0027auth.userManager\u0027, \u0027user\u0027] })"},{"line_number":36,"context_line":"      )"},{"line_number":37,"context_line":"    )"},{"line_number":38,"context_line":"  )"}],"source_content_type":"text/javascript","patch_set":26,"id":"54cf0d78_81f99d7b","line":35,"in_reply_to":"fa7bff6b_892e3473","updated":"2021-08-09 20:41:45.000000000","message":"So what happens is that without adding these, the dev deployment seems to be stuck in a loop. Nothing appears in the console. If someone has an idea how to figure out what is going on exactly, I\u0027ll gladly take the suggestion.","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"ca91ae730e4da1e87f402ce1507e27d62a01ebe7","unresolved":true,"context_lines":[{"line_number":32,"context_line":"        // TODO (felix): Re-enable the status.status path once we know how to"},{"line_number":33,"context_line":"        // solve the weird state mutations that are done somewhere deep within"},{"line_number":34,"context_line":"        // the logic of the status page (or its child components)."},{"line_number":35,"context_line":"        reduxImmutableStateInvariant({ ignore: [\u0027status.status\u0027, \u0027auth.userManager\u0027, \u0027user\u0027] })"},{"line_number":36,"context_line":"      )"},{"line_number":37,"context_line":"    )"},{"line_number":38,"context_line":"  )"}],"source_content_type":"text/javascript","patch_set":26,"id":"fa7bff6b_892e3473","line":35,"in_reply_to":"ff05f8b8_59b3bb22","updated":"2021-08-09 13:08:37.000000000","message":"That seems suspicious. Is it conflicting with the other state added to the store?\n\nPerhaps this need a comment to explain the motivation of ignoring the redux state invariant.","commit_id":"072a23081e18a41304aa2ea368b992f9dd964984"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"c1ae5e8dd17de7fb505f9d92f43aa90318b1ffaa","unresolved":true,"context_lines":[{"line_number":40,"context_line":"            // instantiated at startup time (see https://github.com/maxmantz/redux-oidc-example/blob/master/src/store.js"},{"line_number":41,"context_line":"            // for example). We cannot do that since userManager\u0027s config must be"},{"line_number":42,"context_line":"            // fetched from zuul-web first."},{"line_number":43,"context_line":"            \u0027auth.userManager\u0027]"},{"line_number":44,"context_line":"        })"},{"line_number":45,"context_line":"      )"},{"line_number":46,"context_line":"    )"}],"source_content_type":"text/javascript","patch_set":32,"id":"b40ac91f_82d6a90a","line":43,"updated":"2021-08-11 23:56:04.000000000","message":"Perhaps that could be solved by using another store, it seems like we could create it with another react-redux Provider in the App, e.g. after the oidc configuration is known.\n\nAlternatively we could also check if there is a conflict with the state variable name.\n\nThough this may not be a big deal, and we could address that particular issue in a follow-up, to avoid delaying the current stack.","commit_id":"07874d99d6b234d9b59a49b5aa8ee1731e5d48e9"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"ca41b3f40517482279e259f785f0519cad0d4e42","unresolved":true,"context_lines":[{"line_number":40,"context_line":"            // instantiated at startup time (see https://github.com/maxmantz/redux-oidc-example/blob/master/src/store.js"},{"line_number":41,"context_line":"            // for example). We cannot do that since userManager\u0027s config must be"},{"line_number":42,"context_line":"            // fetched from zuul-web first."},{"line_number":43,"context_line":"            \u0027auth.userManager\u0027]"},{"line_number":44,"context_line":"        })"},{"line_number":45,"context_line":"      )"},{"line_number":46,"context_line":"    )"}],"source_content_type":"text/javascript","patch_set":32,"id":"530df5be_7c4495a3","line":43,"in_reply_to":"b40ac91f_82d6a90a","updated":"2021-08-12 07:56:12.000000000","message":"I\u0027ve looked into using several stores, but everything I\u0027ve seen advised against doing that. Granted, we seem to allow something bad already, so \"in for a penny ...\"\n\nI am going to take this opportunity to look into other libraries. Now that I am more at ease with react and redux, it might be easier to use other libs than I previously thought. That\u0027d be ideal too since redux-oidc seems to be dead (lots of issues on GH without answers in the last year).","commit_id":"07874d99d6b234d9b59a49b5aa8ee1731e5d48e9"}]}
