RenderFileName.tsx 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import React, { useState } from 'react';
  2. import { updateFilePublicMagicMetadata } from 'services/fileService';
  3. import { EnteFile } from 'types/file';
  4. import constants from 'utils/strings/constants';
  5. import {
  6. changeFileName,
  7. splitFilenameAndExtension,
  8. updateExistingFilePubMetadata,
  9. } from 'utils/file';
  10. import EditIcon from '@mui/icons-material/Edit';
  11. import { FreeFlowText, Label, Row, Value } from 'components/Container';
  12. import { logError } from 'utils/sentry';
  13. import { FileNameEditForm } from './FileNameEditForm';
  14. import { IconButton } from '@mui/material';
  15. export const getFileTitle = (filename, extension) => {
  16. if (extension) {
  17. return filename + '.' + extension;
  18. } else {
  19. return filename;
  20. }
  21. };
  22. export function RenderFileName({
  23. shouldDisableEdits,
  24. file,
  25. scheduleUpdate,
  26. }: {
  27. shouldDisableEdits: boolean;
  28. file: EnteFile;
  29. scheduleUpdate: () => void;
  30. }) {
  31. const originalTitle = file?.metadata.title;
  32. const [isInEditMode, setIsInEditMode] = useState(false);
  33. const [originalFileName, extension] =
  34. splitFilenameAndExtension(originalTitle);
  35. const [filename, setFilename] = useState(originalFileName);
  36. const openEditMode = () => setIsInEditMode(true);
  37. const closeEditMode = () => setIsInEditMode(false);
  38. const saveEdits = async (newFilename: string) => {
  39. try {
  40. if (file) {
  41. if (filename === newFilename) {
  42. closeEditMode();
  43. return;
  44. }
  45. setFilename(newFilename);
  46. const newTitle = getFileTitle(newFilename, extension);
  47. let updatedFile = await changeFileName(file, newTitle);
  48. updatedFile = (
  49. await updateFilePublicMagicMetadata([updatedFile])
  50. )[0];
  51. updateExistingFilePubMetadata(file, updatedFile);
  52. scheduleUpdate();
  53. }
  54. } catch (e) {
  55. logError(e, 'failed to update file name');
  56. } finally {
  57. closeEditMode();
  58. }
  59. };
  60. return (
  61. <>
  62. <Row>
  63. <Label width="30%">{constants.FILE_NAME}</Label>
  64. {!isInEditMode ? (
  65. <>
  66. <Value width={!shouldDisableEdits ? '60%' : '70%'}>
  67. <FreeFlowText>
  68. {getFileTitle(filename, extension)}
  69. </FreeFlowText>
  70. </Value>
  71. {!shouldDisableEdits && (
  72. <Value
  73. width="10%"
  74. style={{
  75. cursor: 'pointer',
  76. marginLeft: '10px',
  77. }}>
  78. <IconButton onClick={openEditMode}>
  79. <EditIcon />
  80. </IconButton>
  81. </Value>
  82. )}
  83. </>
  84. ) : (
  85. <FileNameEditForm
  86. extension={extension}
  87. filename={filename}
  88. saveEdits={saveEdits}
  89. discardEdits={closeEditMode}
  90. />
  91. )}
  92. </Row>
  93. </>
  94. );
  95. }