• 
      

    Port FileAttachmentThumbnailView to TS/spina.

    Review Request #13221 — Created Aug. 17, 2023 and submitted

    Information

    Review Board
    release-6.x

    Reviewers

    This ports the FileAttachmentThumbnail view to TS/spina. The view is also
    renamed to FileAttachmentThumbnailView to follow our naming conventions.

    • Ran JS unit tests.
    • Tested using/viewing file attachment thumbnails on the review request,
      in change descriptions, and in file review UIs.
    • Tested uploading/deleting files.
    • Tested all the file actions.
    Summary ID
    Port FileAttachmentThumbnailView to TS/spina.
    97cabc4ead7868101913165447726bed63586c9f
    Description From Last Updated

    The summary and description need to be separated by a blank line.

    chipx86chipx86

    I don't know that we've standardized this yet for TypeScript, but we should probably have required fields before optional fields. …

    chipx86chipx86

    While here, can you turn this (and others) into a dedent, so we can save on the join?

    chipx86chipx86

    Worth mentioning, we'll do a $() for every one of these when constructing the object (since these are instance attributes, …

    chipx86chipx86

    Let's organize _ before #, since _ is semi-public and # is semi-private. We haven't done this elsewhere, but we …

    chipx86chipx86

    onInitialRender() shouldn't return anything. If it did, we'd actually want to use this instead of the class name as the …

    chipx86chipx86

    Missing a trailing comma.

    chipx86chipx86

    Missing a trailing comma.

    chipx86chipx86

    ESLint will complain about the ordering here. This should be in alphabetical order.

    chipx86chipx86

    Let's define the types for these here.

    daviddavid

    Since we're touching this, can we change var to const, add a trailing comma on canEdit, and sort the object …

    daviddavid

    These default values can all be specified in the instance definitions.

    daviddavid

    Parens around val aren't necessary here.

    daviddavid

    If you pull, you can now add: import { suite } from '@beanbag/jasmine-suites';

    daviddavid

    Just realized, since we renamed FileAttachmentThumbnail to FileAttachmentThumbnailView, we should at least document the name in a Version Changed, and …

    chipx86chipx86

    There's a section header for this: /** * ... * * Deprecated: * 6.0 */ When we finally have generated …

    chipx86chipx86
    maubin
    chipx86
    1. 
        
    2. Show all issues

      The summary and description need to be separated by a blank line.

    3. Show all issues

      I don't know that we've standardized this yet for TypeScript, but we should probably have required fields before optional fields. This better matches the requirements imposed in Python for dataclasses, and how we often document things.

    4. Show all issues

      While here, can you turn this (and others) into a dedent, so we can save on the join?

    5. Show all issues

      Worth mentioning, we'll do a $() for every one of these when constructing the object (since these are instance attributes, not class attributes -- silly ES6 classes).

      This is fine if we want that as the default, but since these are set in render, it might be a better failure to leave these as undefined, at least in some cases?

    6. Show all issues

      Let's organize _ before #, since _ is semi-public and # is semi-private.

      We haven't done this elsewhere, but we should probably also mark the _ ones with the private keyword, unless we need them in tests.

    7. Show all issues

      onInitialRender() shouldn't return anything.

      If it did, we'd actually want to use this instead of the class name as the type.

    8. Show all issues

      Missing a trailing comma.

    9. Show all issues

      Missing a trailing comma.

    10. Show all issues

      ESLint will complain about the ordering here. This should be in alphabetical order.

      1. Woops, this made me realize that I didn't have ESLint set up.

    11. 
        
    maubin
    david
    1. 
        
    2. Show all issues

      Let's define the types for these here.

    3. reviewboard/templates/reviews/changedesc_file_attachment.html (Diff revision 3)
       
       
       
       
       
       
       
      Show all issues

      Since we're touching this, can we change var to const, add a trailing comma on canEdit, and sort the object keys here?

    4. 
        
    maubin
    maubin
    david
    1. 
        
    2. Show all issues

      These default values can all be specified in the instance definitions.

    3. Show all issues

      If you pull, you can now add:

      import { suite } from '@beanbag/jasmine-suites';
      
    4. 
        
    maubin
    david
    1. 
        
    2. Show all issues

      Parens around val aren't necessary here.

    3. 
        
    maubin
    david
    1. Ship It!
    2. 
        
    chipx86
    1. Change looks ready to go. Just one thing I want to make sure we have an answer for.

    2. Show all issues

      Just realized, since we renamed FileAttachmentThumbnail to FileAttachmentThumbnailView, we should at least document the name in a Version Changed, and if there's any reason extensions ever needed to refer to this by name (I don't think so but maybe?) then we'd want an alias from the old name to new name.

      1. Makes sense. For the alias, could I achieve that by doing this in the fileAttachmentThumbnailView.ts file?

        @spina
        export class FileAttachmentThumbnail extends FileAttachmentThumbnailView {}
        

        (and export it from the index.ts too)

      2. You could do it in the root index.ts by doing:

        /* Some docs mentioning this alias and marking it deprecated */
        export const FileAttachmentThumbnail = FileAttachmentThumbnailView;
        

        Or it could be done here as well with a similar assignment, and then funnel that down.

    3. 
        
    maubin
    chipx86
    1. 
        
    2. Show all issues

      There's a section header for this:

      /**
       * ...
       *
       * Deprecated:
       *     6.0
       */
      

      When we finally have generated docs for this, that'll show up with a deprecation notice.

    3. 
        
    maubin
    maubin
    Review request changed
    Status:
    Completed
    Change Summary:
    Pushed to release-6.x (073851e)