mirror of
https://github.com/plankanban/planka.git
synced 2025-12-22 09:15:37 +03:00
Compare commits
5 Commits
planka-0.2
...
planka-0.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1d2193c381 | ||
|
|
70f40e26af | ||
|
|
814b5810ac | ||
|
|
f372113def | ||
|
|
14dff96434 |
@@ -15,13 +15,13 @@ type: application
|
|||||||
# This is the chart version. This version number should be incremented each time you make changes
|
# This is the chart version. This version number should be incremented each time you make changes
|
||||||
# to the chart and its templates, including the app version.
|
# to the chart and its templates, including the app version.
|
||||||
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
||||||
version: 0.2.12
|
version: 0.2.13
|
||||||
|
|
||||||
# This is the version number of the application being deployed. This version number should be
|
# This is the version number of the application being deployed. This version number should be
|
||||||
# incremented each time you make changes to the application. Versions are not expected to
|
# incremented each time you make changes to the application. Versions are not expected to
|
||||||
# follow Semantic Versioning. They should reflect the version the application is using.
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||||
# It is recommended to use it with quotes.
|
# It is recommended to use it with quotes.
|
||||||
appVersion: "1.23.3"
|
appVersion: "1.23.4"
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
- alias: postgresql
|
- alias: postgresql
|
||||||
|
|||||||
6
client/package-lock.json
generated
6
client/package-lock.json
generated
@@ -10956,9 +10956,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/http-proxy-middleware": {
|
"node_modules/http-proxy-middleware": {
|
||||||
"version": "2.0.6",
|
"version": "2.0.7",
|
||||||
"resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz",
|
||||||
"integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==",
|
"integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/http-proxy": "^1.17.8",
|
"@types/http-proxy": "^1.17.8",
|
||||||
"http-proxy": "^1.18.1",
|
"http-proxy": "^1.18.1",
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import { focusEnd } from '../../../utils/element-helpers';
|
|||||||
|
|
||||||
import styles from './CommentEdit.module.scss';
|
import styles from './CommentEdit.module.scss';
|
||||||
|
|
||||||
const CommentEdit = React.forwardRef(({ children, defaultData, onUpdate }, ref) => {
|
const CommentEdit = React.forwardRef(({ defaultData, onUpdate, text, actions }, ref) => {
|
||||||
const [t] = useTranslation();
|
const [t] = useTranslation();
|
||||||
const [isOpened, setIsOpened] = useState(false);
|
const [isOpened, setIsOpened] = useState(false);
|
||||||
const [data, handleFieldChange, setData] = useForm(null);
|
const [data, handleFieldChange, setData] = useForm(null);
|
||||||
@@ -76,7 +76,12 @@ const CommentEdit = React.forwardRef(({ children, defaultData, onUpdate }, ref)
|
|||||||
}, [isOpened]);
|
}, [isOpened]);
|
||||||
|
|
||||||
if (!isOpened) {
|
if (!isOpened) {
|
||||||
return children;
|
return (
|
||||||
|
<>
|
||||||
|
{actions}
|
||||||
|
{text}
|
||||||
|
</>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -101,9 +106,10 @@ const CommentEdit = React.forwardRef(({ children, defaultData, onUpdate }, ref)
|
|||||||
});
|
});
|
||||||
|
|
||||||
CommentEdit.propTypes = {
|
CommentEdit.propTypes = {
|
||||||
children: PropTypes.element.isRequired,
|
|
||||||
defaultData: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types
|
defaultData: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types
|
||||||
onUpdate: PropTypes.func.isRequired,
|
onUpdate: PropTypes.func.isRequired,
|
||||||
|
text: PropTypes.element.isRequired,
|
||||||
|
actions: PropTypes.element.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default React.memo(CommentEdit);
|
export default React.memo(CommentEdit);
|
||||||
|
|||||||
@@ -31,7 +31,18 @@ const ItemComment = React.memo(
|
|||||||
<User name={user.name} avatarUrl={user.avatarUrl} />
|
<User name={user.name} avatarUrl={user.avatarUrl} />
|
||||||
</span>
|
</span>
|
||||||
<div className={classNames(styles.content)}>
|
<div className={classNames(styles.content)}>
|
||||||
|
<CommentEdit
|
||||||
|
ref={commentEdit}
|
||||||
|
defaultData={data}
|
||||||
|
onUpdate={onUpdate}
|
||||||
|
text={
|
||||||
|
<div className={styles.text}>
|
||||||
|
<Markdown linkTarget="_blank">{data.text}</Markdown>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
actions={
|
||||||
<div className={styles.title}>
|
<div className={styles.title}>
|
||||||
|
<span>
|
||||||
<span className={styles.author}>{user.name}</span>
|
<span className={styles.author}>{user.name}</span>
|
||||||
<span className={styles.date}>
|
<span className={styles.date}>
|
||||||
{t(`format:${getDateFormat(createdAt)}`, {
|
{t(`format:${getDateFormat(createdAt)}`, {
|
||||||
@@ -39,12 +50,7 @@ const ItemComment = React.memo(
|
|||||||
value: createdAt,
|
value: createdAt,
|
||||||
})}
|
})}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</span>
|
||||||
<CommentEdit ref={commentEdit} defaultData={data} onUpdate={onUpdate}>
|
|
||||||
<>
|
|
||||||
<div className={styles.text}>
|
|
||||||
<Markdown linkTarget="_blank">{data.text}</Markdown>
|
|
||||||
</div>
|
|
||||||
{canEdit && (
|
{canEdit && (
|
||||||
<Comment.Actions>
|
<Comment.Actions>
|
||||||
<Comment.Action
|
<Comment.Action
|
||||||
@@ -67,8 +73,9 @@ const ItemComment = React.memo(
|
|||||||
</DeletePopup>
|
</DeletePopup>
|
||||||
</Comment.Actions>
|
</Comment.Actions>
|
||||||
)}
|
)}
|
||||||
</>
|
</div>
|
||||||
</CommentEdit>
|
}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</Comment>
|
</Comment>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -38,6 +38,12 @@
|
|||||||
|
|
||||||
.title {
|
.title {
|
||||||
padding-bottom: 4px;
|
padding-bottom: 4px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
position: sticky;
|
||||||
|
top: -1em;
|
||||||
|
background: #f5f6f7;
|
||||||
}
|
}
|
||||||
|
|
||||||
.user {
|
.user {
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ const DEFAULT_DATA = {
|
|||||||
name: '',
|
name: '',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const MULTIPLE_REGEX = /\s*\r?\n\s*/;
|
||||||
|
|
||||||
const Add = React.forwardRef(({ children, onCreate }, ref) => {
|
const Add = React.forwardRef(({ children, onCreate }, ref) => {
|
||||||
const [t] = useTranslation();
|
const [t] = useTranslation();
|
||||||
const [isOpened, setIsOpened] = useState(false);
|
const [isOpened, setIsOpened] = useState(false);
|
||||||
@@ -29,7 +31,8 @@ const Add = React.forwardRef(({ children, onCreate }, ref) => {
|
|||||||
setIsOpened(false);
|
setIsOpened(false);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const submit = useCallback(() => {
|
const submit = useCallback(
|
||||||
|
(isMultiple = false) => {
|
||||||
const cleanData = {
|
const cleanData = {
|
||||||
...data,
|
...data,
|
||||||
name: data.name.trim(),
|
name: data.name.trim(),
|
||||||
@@ -40,11 +43,22 @@ const Add = React.forwardRef(({ children, onCreate }, ref) => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isMultiple) {
|
||||||
|
cleanData.name.split(MULTIPLE_REGEX).forEach((name) => {
|
||||||
|
onCreate({
|
||||||
|
...cleanData,
|
||||||
|
name,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} else {
|
||||||
onCreate(cleanData);
|
onCreate(cleanData);
|
||||||
|
}
|
||||||
|
|
||||||
setData(DEFAULT_DATA);
|
setData(DEFAULT_DATA);
|
||||||
focusNameField();
|
focusNameField();
|
||||||
}, [onCreate, data, setData, focusNameField]);
|
},
|
||||||
|
[onCreate, data, setData, focusNameField],
|
||||||
|
);
|
||||||
|
|
||||||
useImperativeHandle(
|
useImperativeHandle(
|
||||||
ref,
|
ref,
|
||||||
@@ -63,8 +77,7 @@ const Add = React.forwardRef(({ children, onCreate }, ref) => {
|
|||||||
(event) => {
|
(event) => {
|
||||||
if (event.key === 'Enter') {
|
if (event.key === 'Enter') {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
submit(event.ctrlKey);
|
||||||
submit();
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[submit],
|
[submit],
|
||||||
|
|||||||
@@ -184,6 +184,7 @@ export default {
|
|||||||
addTask: 'Přidat úkol',
|
addTask: 'Přidat úkol',
|
||||||
addToCard: 'Přidat na kartu',
|
addToCard: 'Přidat na kartu',
|
||||||
addUser: 'Přidat uživatele',
|
addUser: 'Přidat uživatele',
|
||||||
|
copyLink_title: 'Zkopírovat odkaz',
|
||||||
createBoard: 'Vytvořit tabuli',
|
createBoard: 'Vytvořit tabuli',
|
||||||
createFile: 'Vytvořit soubor',
|
createFile: 'Vytvořit soubor',
|
||||||
createLabel: 'Vytvořit štítek',
|
createLabel: 'Vytvořit štítek',
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ export default {
|
|||||||
common: {
|
common: {
|
||||||
emailOrUsername: 'E-mail nebo uživatelské jméno',
|
emailOrUsername: 'E-mail nebo uživatelské jméno',
|
||||||
invalidEmailOrUsername: 'Nesprávný e-mail nebo uživatelské jméno',
|
invalidEmailOrUsername: 'Nesprávný e-mail nebo uživatelské jméno',
|
||||||
|
invalidCredentials: 'Neplatné přihlašovací údaje',
|
||||||
invalidPassword: 'Nesprávné heslo',
|
invalidPassword: 'Nesprávné heslo',
|
||||||
logInToPlanka: 'Přihlásit se do Planka',
|
logInToPlanka: 'Přihlásit se do Planka',
|
||||||
noInternetConnection: 'Bez připojení k internetu',
|
noInternetConnection: 'Bez připojení k internetu',
|
||||||
@@ -11,6 +12,7 @@ export default {
|
|||||||
projectManagement: 'Správa projektu',
|
projectManagement: 'Správa projektu',
|
||||||
serverConnectionFailed: 'Připojení k serveru selhalo',
|
serverConnectionFailed: 'Připojení k serveru selhalo',
|
||||||
unknownError: 'Neznámá chyba, zkuste to později',
|
unknownError: 'Neznámá chyba, zkuste to později',
|
||||||
|
useSingleSignOn: 'Použít jednorázové přihlášení',
|
||||||
},
|
},
|
||||||
|
|
||||||
action: {
|
action: {
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
export default '1.23.3';
|
export default '1.23.4';
|
||||||
|
|||||||
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "planka",
|
"name": "planka",
|
||||||
"version": "1.23.3",
|
"version": "1.23.4",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "planka",
|
"name": "planka",
|
||||||
"version": "1.23.3",
|
"version": "1.23.4",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"license": "AGPL-3.0",
|
"license": "AGPL-3.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "planka",
|
"name": "planka",
|
||||||
"version": "1.23.3",
|
"version": "1.23.4",
|
||||||
"private": true,
|
"private": true,
|
||||||
"homepage": "https://plankanban.github.io/planka",
|
"homepage": "https://plankanban.github.io/planka",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|||||||
Reference in New Issue
Block a user