mirror of
https://github.com/overleaf/overleaf.git
synced 2024-12-13 15:49:34 -05:00
2f99e3ccf1
Fixes https://github.com/overleaf/internal/issues/18144 Browsers use a [bfcache](https://web.dev/articles/bfcache) (Back/forward cache) which restores form data on navigation. Unfortunately, it causes checkbox appearances not to respect our React states. Setting `autoComplete="off"` on checkboxes mitigates this problem. (From https://stackoverflow.com/questions/299811/why-does-the-checkbox-stay-checked-when-reloading-the-page) Another solution could be to set a `Cache-Control: no-store` header, but this might additionnal undesired consequences. GitOrigin-RevId: 7d3cceb1c818ad70de7e806ea6d714ffc8bffb4a
45 lines
1.3 KiB
TypeScript
45 lines
1.3 KiB
TypeScript
import React, { useCallback } from 'react'
|
|
import { useTranslation } from 'react-i18next'
|
|
import { useGroupMembersContext } from '../../context/group-members-context'
|
|
|
|
export default function SelectAllCheckbox() {
|
|
const { t } = useTranslation()
|
|
|
|
const { selectedUsers, users, selectAllNonManagedUsers, unselectAllUsers } =
|
|
useGroupMembersContext()
|
|
|
|
const handleSelectAllNonManagedClick = useCallback(
|
|
(e: React.ChangeEvent<HTMLInputElement>) => {
|
|
if (e.target.checked) {
|
|
selectAllNonManagedUsers()
|
|
} else {
|
|
unselectAllUsers()
|
|
}
|
|
},
|
|
[selectAllNonManagedUsers, unselectAllUsers]
|
|
)
|
|
|
|
// Pending: user.enrollment will be `undefined`
|
|
// Not managed: user.enrollment will be an empty object
|
|
const nonManagedUsers = users.filter(user => !user.enrollment?.managedBy)
|
|
|
|
if (nonManagedUsers.length === 0) {
|
|
return null
|
|
}
|
|
|
|
return (
|
|
<td className="cell-checkbox">
|
|
<label htmlFor="select-all" className="sr-only">
|
|
{t('select_all')}
|
|
</label>
|
|
<input
|
|
className="select-all"
|
|
id="select-all"
|
|
type="checkbox"
|
|
autoComplete="off"
|
|
onChange={handleSelectAllNonManagedClick}
|
|
checked={selectedUsers.length === nonManagedUsers.length}
|
|
/>
|
|
</td>
|
|
)
|
|
}
|