Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added the ability to add a photo in the item creation modal #173

Merged

Conversation

cjmielke
Copy link
Contributor

@cjmielke cjmielke commented Aug 19, 2024

What type of PR is this?

  • feature

What this PR does / why we need it:

Adds a button to the item creation model to add a photograph, so that users don't have to dig for the option in the advanced edit menu afterwards. I've been wanting this feature for a while too, and apparently others do as well.

Which issue(s) this PR fixes:

Fixes: #58

Special notes for your reviewer:

This is my first time developing in Vue.js, so apologies

A better solution might be to also modify the backend to accept the image on item creation, but for simplicity I just post'd a second API call from the frontend using the same function as the edit menu.

Testing

Works on my end, and Ive done my best to make sure it works in tiny phone screens. The UI could be improved.

Summary by CodeRabbit

  • New Features

    • Introduced photo upload functionality in the item creation modal.
    • Added a live preview feature for selected images before submission.
    • Enhanced user interface with a new button for photo uploads.
  • Bug Fixes

    • Improved error handling and user feedback during image upload failures.

closes #58

Copy link
Contributor

coderabbitai bot commented Aug 19, 2024

Walkthrough

Walkthrough

The recent modifications to the CreateModal.vue component introduce an image upload feature, allowing users to select and preview images during the item creation process. This functionality is integrated seamlessly, enabling real-time feedback and ensuring that images can be uploaded alongside item details, thereby enhancing the overall user experience.

Changes

File Path Change Summary
frontend/components/Item/CreateModal.vue Added image upload functionality, including file input, preview handling via previewImage, and upload logic through uploadImage.
frontend/locales/en.json Introduced a new key-value pair for the "photo_button" in the "create_modal" section to enhance user interface labels.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant CreateModal
    participant FileReader
    participant Server

    User->>CreateModal: Clicks upload label
    CreateModal-->>User: Show file input
    User->>CreateModal: Selects image file
    CreateModal->>FileReader: Read file
    FileReader-->>CreateModal: Return image data URL
    CreateModal-->>User: Display image preview
    User->>CreateModal: Submits form
    CreateModal->>Server: Upload image
    Server-->>CreateModal: Confirm upload success
    CreateModal-->>User: Show success message
Loading

🎉 In the modal, new wonders bloom,
Images dance, dispelling gloom.
Uploads flow, previews gleam,
User joy—a seamless dream!
With each click, creativity soars,
A vibrant world behind closed doors. ✨


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

Share
Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai generate interesting stats about this repository and render them as a table.
    • @coderabbitai show all the console.log statements in this repository.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (invoked as PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Additionally, you can add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Inline review comments failed to post

Actionable comments posted: 1

Outside diff range, codebase verification and nitpick comments (2)
frontend/components/Item/CreateModal.vue (2)

11-16: Ensure accessibility for the hidden input.

The hidden file input is triggered by a label, which is a good practice for cleaner UI. Ensure that the label is accessible to screen readers for better accessibility.

- <label for="photo" class="btn">Photo 📷</label>
+ <label for="photo" class="btn" aria-label="Upload Photo">Photo 📷</label>

41-51: Ensure consistent styling and add alt text for images.

The preview area provides immediate feedback, which is excellent for user experience. Ensure the styling is consistent with the rest of the application and consider adding alt text for accessibility.

- <img :src="form.preview" class="h-[100px] w-full object-cover rounded-t shadow-sm border-gray-300" />
+ <img :src="form.preview" alt="Image Preview" class="h-[100px] w-full object-cover rounded-t shadow-sm border-gray-300" />
Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 39163f3 and 377d3e9.

Files selected for processing (1)
  • frontend/components/Item/CreateModal.vue (5 hunks)
Additional comments not posted (3)
frontend/components/Item/CreateModal.vue (3)

113-114: Form data structure changes look good.

The addition of preview and photo properties is appropriate for managing image data. Ensure these properties are reset correctly after form submission.


132-144: Function implementation looks good.

The uploadImage function correctly checks for file existence before attempting an upload. Ensure this function is integrated appropriately within the component logic.


191-201: Verify error handling and consider logging.

The create function correctly handles photo uploads and provides user feedback. Ensure error handling is robust and consider adding logging for debugging purposes.

Comments failed to post (1)
frontend/components/Item/CreateModal.vue

119-129: Consider adding error handling for FileReader.

The previewImage function effectively uses the FileReader API to preview images. Implement error handling to manage potential file reading errors gracefully.

reader.onerror = () => {
  console.error("Error reading file");
  toast.error("Failed to load image preview");
};

@don-ferris
Copy link

Sorry for the stupid question, but is this checked in to the main branch so all I have to do is install? Or is there something more I have to do (or other branch I should use)? To me, this is core functionality, so I really want to make it happen.

@adiov
Copy link

adiov commented Aug 27, 2024

@don-ferris You have a couple of options. The easiest is to checkout this PR's branch and then use docker build to build the image under a tag of your choosing. You can then modify your docker-compose.yaml file to use the new image you created. You can also clone this repo normally and then manually replace frontend/components/Item/CreateModal.vue with the one from cjmielke:add_photo_when_creating_item (this one), and then build the image and use it in your docker-compose.yaml.

@cjmielke @tankerkiller125 I tested the functionality. It works as expected, and it already made using homebox much easier and more enjoyable. The placement of the button and its styling isn't great, but I'm not a designer.

@cjmielke
Copy link
Contributor Author

cjmielke commented Aug 28, 2024

@adiov I hear ya, I'm no designer either, and I try to avoid frontend as much as I can. I tried working on that button's margins for a while, but then said "eff it, it works". CSS always fights me.

@don-ferris I just merged it to my main branch, making it a bit more straightforward. Until the devs merge it, you can get my copy up by doing the following. I'll be hosting this branch on my own eventually, once I have time to migrate my existing server.

git clone https://github.com/cjmielke/homebox.git
cd homebox
docker compose build
docker compose up

@don-ferris
Copy link

don-ferris commented Aug 28, 2024

@adiov I hear ya, I'm no designer either, and I try to avoid frontend as much as I can. I tried working on that button's margins for a while, but then said "eff it, it works". CSS always fights me.

@don-ferris I just merged it to my main branch, making it a bit more straightforward. Until the devs merge it, you can get my copy up by doing the following. I'll be hosting this branch on my own eventually, once I have time to migrate my existing server.

git clone https://github.com/cjmielke/homebox.git
cd homebox
docker compose build
docker compose up

Thank you for that! When I read your previous reply, I was like "no way I'm going to be able to pull that off!" Way above my pay grade!

So I tried your instrux and got this:

 => [homebox stage-5 4/7] COPY --from=builder /go/bin/api /app             0.1s
 => [homebox stage-5 5/7] RUN chmod +x /app/api                            0.5s
 => [homebox stage-5 6/7] RUN apk add --no-cache wget                      1.2s
 => [homebox stage-5 7/7] WORKDIR /app                                     0.0s
 => [homebox] exporting to image                                           0.6s
 => => exporting layers                                                    0.6s
 => => writing image sha256:52bb1c6c21eff6d47a3eda4d6d7a0f538398e98d9b055  0.0s
 => => naming to docker.io/library/homebox                                 0.0s
 => [homebox] resolving provenance for metadata file                       0.0s
[+] Running 0/0
 ⠋ Container homebox  Recreate                                             0.0s 
Error response from daemon: invalid mount config for type "bind": bind source path does not exist: /root/docker/homebox/data

No idea what to do about that. Can I get a little help?

Update: I tried using the standard docker-compose and replacing (image: ghcr.io/)"sysadminsmedia" with "cjmielke" and I got this:
ERROR: Head "https://ghcr.io/v2/cjmielke/homebox/manifests/latest": denied

Update 2: So, the first time, I copied all 4 lines, pasted them, and hit enter. So I nuked the homebox directory and started over. Beginning with the git clone command, I executed each one individually. No errors on the docker compose build command but...

root@df:~/docker/homebox# docker-compose up -d
Recreating c55f516535a3_homebox ... 

ERROR: for c55f516535a3_homebox  'ContainerConfig'

ERROR: for homebox  'ContainerConfig'
Traceback (most recent call last):
  File "/usr/bin/docker-compose", line 33, in <module>
    sys.exit(load_entry_point('docker-compose==1.29.2', 'console_scripts', 'docker-compose')())
  File "/usr/lib/python3/dist-packages/compose/cli/main.py", line 81, in main
    command_func()
  File "/usr/lib/python3/dist-packages/compose/cli/main.py", line 203, in perform_command
    handler(command, command_options)
  File "/usr/lib/python3/dist-packages/compose/metrics/decorator.py", line 18, in wrapper
    result = fn(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/compose/cli/main.py", line 1186, in up
    to_attach = up(False)
  File "/usr/lib/python3/dist-packages/compose/cli/main.py", line 1166, in up
    return self.project.up(
  File "/usr/lib/python3/dist-packages/compose/project.py", line 697, in up
    results, errors = parallel.parallel_execute(
  File "/usr/lib/python3/dist-packages/compose/parallel.py", line 108, in parallel_execute
    raise error_to_reraise
  File "/usr/lib/python3/dist-packages/compose/parallel.py", line 206, in producer
    result = func(obj)
  File "/usr/lib/python3/dist-packages/compose/project.py", line 679, in do
    return service.execute_convergence_plan(
  File "/usr/lib/python3/dist-packages/compose/service.py", line 579, in execute_convergence_plan
    return self._execute_convergence_recreate(
  File "/usr/lib/python3/dist-packages/compose/service.py", line 499, in _execute_convergence_recreate
    containers, errors = parallel_execute(
  File "/usr/lib/python3/dist-packages/compose/parallel.py", line 108, in parallel_execute
    raise error_to_reraise
  File "/usr/lib/python3/dist-packages/compose/parallel.py", line 206, in producer
    result = func(obj)
  File "/usr/lib/python3/dist-packages/compose/service.py", line 494, in recreate
    return self.recreate_container(
  File "/usr/lib/python3/dist-packages/compose/service.py", line 612, in recreate_container
    new_container = self.create_container(
  File "/usr/lib/python3/dist-packages/compose/service.py", line 330, in create_container
    container_options = self._get_container_create_options(
  File "/usr/lib/python3/dist-packages/compose/service.py", line 921, in _get_container_create_options
    container_options, override_options = self._build_container_volume_options(
  File "/usr/lib/python3/dist-packages/compose/service.py", line 960, in _build_container_volume_options
    binds, affinity = merge_volume_bindings(
  File "/usr/lib/python3/dist-packages/compose/service.py", line 1548, in merge_volume_bindings
    old_volumes, old_mounts = get_container_data_volumes(
  File "/usr/lib/python3/dist-packages/compose/service.py", line 1579, in get_container_data_volumes
    container.image_config['ContainerConfig'].get('Volumes') or {}
KeyError: 'ContainerConfig'

Hope that helps you to help me. (Thanks again, by the way. I really appreciate you!)

P.S. Once I get this working, I'll do a PR on your repo and fix the CSS to make it look pretty. :)

Copy link
Contributor

@tankerkiller125 tankerkiller125 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall it looks good, I'm not exactly a UI dev myself, worse case this can be cleaned up a later point.

I have just two little nitpicks I'd like to see sorted before I merge this in, just some cleanup and basic translation stuff.

Thanks for the PR!

frontend/components/Item/CreateModal.vue Outdated Show resolved Hide resolved
frontend/components/Item/CreateModal.vue Outdated Show resolved Hide resolved
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between ba460e7 and 261e342.

Files selected for processing (2)
  • frontend/components/Item/CreateModal.vue (5 hunks)
  • frontend/locales/en.json (1 hunks)
Additional comments not posted (9)
frontend/locales/en.json (1)

21-22: Addition of new key-value pair for photo button.

The new key "photo_button" with the value "Photo 📷" has been added correctly to the "create_modal" section.

The code changes are approved.

frontend/components/Item/CreateModal.vue (8)

9-10: Addition of new file input element for photo upload.

The new file input element and label for the photo button have been added correctly, enhancing the user interface.

The code changes are approved.


13-16: Addition of new label and input for photo upload.

The new label and input for photo upload are correctly implemented, providing a user-friendly way to upload images.

The code changes are approved.


38-44: Addition of new div for photo preview area.

The new div for the photo preview area is correctly implemented, allowing users to see a preview of the uploaded image.

The code changes are approved.


106-107: Addition of new reactive properties for image upload.

The new reactive properties preview and photo have been added correctly to the form object, enabling image upload functionality.

The code changes are approved.


112-122: Addition of new function to preview image.

The new function previewImage is correctly implemented, allowing users to preview the uploaded image.

The code changes are approved.


125-137: Addition of new function to upload image.

The new function uploadImage is correctly implemented, handling the image upload process.

The code changes are approved.


184-194: Update to the create function to handle image uploads.

The create function has been updated correctly to handle image uploads, ensuring that the image is uploaded after the item is created.

The code changes are approved.


201-202: Resetting form properties after item creation.

The form properties preview and photo are reset correctly after the item is created, ensuring a clean state for the next item creation.

The code changes are approved.

@tankerkiller125 tankerkiller125 merged commit 7647ea9 into sysadminsmedia:main Aug 29, 2024
2 checks passed
@adiov
Copy link

adiov commented Aug 29, 2024

@cjmielke Could you please edit your PR to use one of the closing keywords? This will assign the bounty to you.

@cjmielke
Copy link
Contributor Author

@adiov I think you meant me - I added "closes #58" in the description, not sure if that works or not

feel free to give the bounty to @hay-kot for building something awesome!

@cjmielke
Copy link
Contributor Author

@don-ferris now that they merged it into main, you might be able to just update your existing install

Aside from this, not sure about the error you are experiencing. Maybe you need superuser permissions on your specific system, but its just a guess.

@tankerkiller125
Copy link
Contributor

now that they merged it into main, you might be able to just update your existing install

You would have to run the :nightly build instead of :latest for docker. :latest only contains the tagged release, although we're planning on doing that fairly soon.

@don-ferris
Copy link

don-ferris commented Aug 29, 2024

Either I'm doing something wrong or there's a problem with the latest nightly build.
Here's my docker-compose.yml...

services:
  homebox:
    image: ghcr.io/sysadminsmedia/homebox:nightly
    container_name: homebox
    restart: always
    environment:
    - HBOX_LOG_LEVEL=info
    - HBOX_LOG_FORMAT=text
    - HBOX_WEB_MAX_UPLOAD_SIZE=10
    volumes:
      - ./data:/data/
    ports:
      - 3101:7745

And here's the command/error output:

Creating network "homebox_default" with the default driver
Recreating c55f516535a3_homebox ... 

ERROR: for c55f516535a3_homebox  'ContainerConfig'

ERROR: for homebox  'ContainerConfig'
Traceback (most recent call last):
  File "/usr/bin/docker-compose", line 33, in <module>
    sys.exit(load_entry_point('docker-compose==1.29.2', 'console_scripts', 'docker-compose')())
  File "/usr/lib/python3/dist-packages/compose/cli/main.py", line 81, in main
    command_func()
  File "/usr/lib/python3/dist-packages/compose/cli/main.py", line 203, in perform_command
    handler(command, command_options)
  File "/usr/lib/python3/dist-packages/compose/metrics/decorator.py", line 18, in wrapper
    result = fn(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/compose/cli/main.py", line 1186, in up
    to_attach = up(False)
  File "/usr/lib/python3/dist-packages/compose/cli/main.py", line 1166, in up
    return self.project.up(
  File "/usr/lib/python3/dist-packages/compose/project.py", line 697, in up
    results, errors = parallel.parallel_execute(
  File "/usr/lib/python3/dist-packages/compose/parallel.py", line 108, in parallel_execute
    raise error_to_reraise
  File "/usr/lib/python3/dist-packages/compose/parallel.py", line 206, in producer
    result = func(obj)
  File "/usr/lib/python3/dist-packages/compose/project.py", line 679, in do
    return service.execute_convergence_plan(
  File "/usr/lib/python3/dist-packages/compose/service.py", line 579, in execute_convergence_plan
    return self._execute_convergence_recreate(
  File "/usr/lib/python3/dist-packages/compose/service.py", line 499, in _execute_convergence_recreate
    containers, errors = parallel_execute(
  File "/usr/lib/python3/dist-packages/compose/parallel.py", line 108, in parallel_execute
    raise error_to_reraise
  File "/usr/lib/python3/dist-packages/compose/parallel.py", line 206, in producer
    result = func(obj)
  File "/usr/lib/python3/dist-packages/compose/service.py", line 494, in recreate
    return self.recreate_container(
  File "/usr/lib/python3/dist-packages/compose/service.py", line 612, in recreate_container
    new_container = self.create_container(
  File "/usr/lib/python3/dist-packages/compose/service.py", line 330, in create_container
    container_options = self._get_container_create_options(
  File "/usr/lib/python3/dist-packages/compose/service.py", line 921, in _get_container_create_options
    container_options, override_options = self._build_container_volume_options(
  File "/usr/lib/python3/dist-packages/compose/service.py", line 960, in _build_container_volume_options
    binds, affinity = merge_volume_bindings(
  File "/usr/lib/python3/dist-packages/compose/service.py", line 1548, in merge_volume_bindings
    old_volumes, old_mounts = get_container_data_volumes(
  File "/usr/lib/python3/dist-packages/compose/service.py", line 1579, in get_container_data_volumes
    container.image_config['ContainerConfig'].get('Volumes') or {}
KeyError: 'ContainerConfig'
docker-compose version 1.29.2, build unknown

I did an update/upgrade to make sure my system is totally up to date.
Also pruned all the old docker images, volumes, and networks.

Help?

@cjmielke
Copy link
Contributor Author

@don-ferris You might be using the older "docker-compose" command, but as I learned pretty recently, the now builtin "docker compose" is the new version

https://docs.docker.com/compose/migrate/

I recently had a different issue, but that was the fix. "docker SPACE compose" instead of "docker DASH compose". The builtin command is much more up to date. If that fixes your problem, you might consider uninstalling the older docker-compose package. Thats what I did to prevent myself from ever making that mistake again.

@tankerkiller125
Copy link
Contributor

That error is 100% related to the older docker-compose command which is no longer supported and is EOL. We're now on docker compose version 2 something rather using the docker compose command. Switching should probably solve the issue.

truecharts-admin referenced this pull request in truecharts/public Sep 5, 2024
… v0.14.0@9f47d0f by renovate (#25934)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
|
[ghcr.io/sysadminsmedia/homebox](https://redirect.github.com/sysadminsmedia/homebox)
| minor | `0.13.0` -> `0.14.0` |

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### Release Notes

<details>
<summary>sysadminsmedia/homebox
(ghcr.io/sysadminsmedia/homebox)</summary>

###
[`v0.14.0`](https://redirect.github.com/sysadminsmedia/homebox/releases/tag/v0.14.0)

[Compare
Source](https://redirect.github.com/sysadminsmedia/homebox/compare/v0.13.0...v0.14.0)

> \[!NOTE]\
> We are aware of some users having issues with the v0.12.0 -> v0.13.0
update on docker specifically, we have so far been unable to replicate
the issue and as such this version does not contain a patch for it. We
want to reassure you though that we are committed to getting to the
bottom of that issue and fixing it, whether that be a patch release, or
something that goes in a fuller release.

#### Homebox Goes International (Languages)

This update contains many fixes, and small resolutions, but it also
contains a HUGE update in terms of making Homebox more accessible to
international users. We've finally added i18n support to Homebox,
allowing users to use Homebox in their own language. It's still early
days, we've translated the majority of the main pages, and we continue
working on it.

To use translations, simply open Homebox, it's really that simple, it
will use whatever the default language setting your browser is set to
use. And fallback to English if your preferred language isn't yet
available. If your language isn't yet available, please consider
[contributing](https://translate.sysadminsmedia.com/projects/homebox/frontend/).
For those that have already contributed, both those named, and those
that don't have your GitHub linked in Weblate (and thus don't appear in
commit messages to mention) thank you so much, we couldn't possible
translate Homebox into so many languages ourselves.

[![Translation
status](http://translate.sysadminsmedia.com/widget/homebox/multi-auto.svg)](http://translate.sysadminsmedia.com/engage/homebox/)

Additionally, we purchased the https://homebox.software domain to give
Homebox a home of it's own on the internet. Which should not only make
it more findable for SEO reasons, but also make it easier to remember
the link to the documentation/home page. Additionally, we setup some
sub-domains to redirect to various sites such as
https://git.homebox.software for Github,
https://discord.homebox.software to go to our Discord server, etc.

#### What's Changed

- Fix small typo in label discussion thread URL by
[@&#8203;victorhooi](https://redirect.github.com/victorhooi) in
[https://github.com/sysadminsmedia/homebox/pull/149](https://redirect.github.com/sysadminsmedia/homebox/pull/149)
- Document search tips, cleanup documentation by
[@&#8203;blessedbiped](https://redirect.github.com/blessedbiped) in
[https://github.com/sysadminsmedia/homebox/pull/152](https://redirect.github.com/sysadminsmedia/homebox/pull/152)
- Fixes to the Tools page by
[@&#8203;rpavlik](https://redirect.github.com/rpavlik) in
[https://github.com/sysadminsmedia/homebox/pull/154](https://redirect.github.com/sysadminsmedia/homebox/pull/154)
- Adding i18n initial support by
[@&#8203;tankerkiller125](https://redirect.github.com/tankerkiller125)
in
[https://github.com/sysadminsmedia/homebox/pull/155](https://redirect.github.com/sysadminsmedia/homebox/pull/155)
- changed companyname and url to sysadminsmedia.com by
[@&#8203;101br03k](https://redirect.github.com/101br03k) in
[https://github.com/sysadminsmedia/homebox/pull/158](https://redirect.github.com/sysadminsmedia/homebox/pull/158)
- \[LANGUAGE UPDATE] Frontend translations for Italian and German by
[@&#8203;lukasitaly](https://redirect.github.com/lukasitaly) in
[https://github.com/sysadminsmedia/homebox/pull/170](https://redirect.github.com/sysadminsmedia/homebox/pull/170)
- Adding email validator by
[@&#8203;RomuloGatto](https://redirect.github.com/RomuloGatto) in
[https://github.com/sysadminsmedia/homebox/pull/178](https://redirect.github.com/sysadminsmedia/homebox/pull/178)
- fix: CSV export not including item notes by
[@&#8203;LarssonOliver](https://redirect.github.com/LarssonOliver) in
[https://github.com/sysadminsmedia/homebox/pull/180](https://redirect.github.com/sysadminsmedia/homebox/pull/180)
- added the ability to add a photo in the item creation modal by
[@&#8203;cjmielke](https://redirect.github.com/cjmielke) in
[https://github.com/sysadminsmedia/homebox/pull/173](https://redirect.github.com/sysadminsmedia/homebox/pull/173)

#### New Contributors

- [@&#8203;victorhooi](https://redirect.github.com/victorhooi) made
their first contribution in
[https://github.com/sysadminsmedia/homebox/pull/149](https://redirect.github.com/sysadminsmedia/homebox/pull/149)
- [@&#8203;blessedbiped](https://redirect.github.com/blessedbiped) made
their first contribution in
[https://github.com/sysadminsmedia/homebox/pull/152](https://redirect.github.com/sysadminsmedia/homebox/pull/152)
- [@&#8203;rpavlik](https://redirect.github.com/rpavlik) made their
first contribution in
[https://github.com/sysadminsmedia/homebox/pull/154](https://redirect.github.com/sysadminsmedia/homebox/pull/154)
- [@&#8203;lukasitaly](https://redirect.github.com/lukasitaly) made
their first contribution in
[https://github.com/sysadminsmedia/homebox/pull/170](https://redirect.github.com/sysadminsmedia/homebox/pull/170)
- [@&#8203;RomuloGatto](https://redirect.github.com/RomuloGatto) made
their first contribution in
[https://github.com/sysadminsmedia/homebox/pull/178](https://redirect.github.com/sysadminsmedia/homebox/pull/178)
- [@&#8203;LarssonOliver](https://redirect.github.com/LarssonOliver)
made their first contribution in
[https://github.com/sysadminsmedia/homebox/pull/180](https://redirect.github.com/sysadminsmedia/homebox/pull/180)
- [@&#8203;cjmielke](https://redirect.github.com/cjmielke) made their
first contribution in
[https://github.com/sysadminsmedia/homebox/pull/173](https://redirect.github.com/sysadminsmedia/homebox/pull/173)

#### Translation Contributors

Please note, this list is based on Github Commits from Weblate, it may
not be 100% accurate, or contain all contributors.

- [@&#8203;SKNTim](https://redirect.github.com/SKNTim) (Chinese
Traditional)
- [@&#8203;olsson82](https://redirect.github.com/olsson82) (Chinese
Traditional)
- [@&#8203;101br03k](https://redirect.github.com/101br03k) (Chinese
Traditional, Swedish, French)
- [@&#8203;Jackxwb](https://redirect.github.com/Jackxwb) (Chinese
Simplified)
-   [@&#8203;SodaSyrup](https://redirect.github.com/SodaSyrup) (Turkish)
- [@&#8203;N0namenull](https://redirect.github.com/N0namenull) (Russian)
-   [@&#8203;scyllaL](https://redirect.github.com/scyllaL) (Russian)
-   [@&#8203;Slydite4](https://redirect.github.com/Slydite4) (Spanish)
- [@&#8203;HydrelioxGitHub](https://redirect.github.com/HydrelioxGitHub)
(French)
-   [@&#8203;chevdor](https://redirect.github.com/chevdor) (French)
- [@&#8203;lukasitaly](https://redirect.github.com/lukasitaly) (Italian,
German, French)
- [@&#8203;olsson82](https://redirect.github.com/olsson82) (Swedish,
German)
-   [@&#8203;terenc3](https://redirect.github.com/terenc3) (German)

**Full Changelog**:
sysadminsmedia/homebox@v0.13.0...v0.14.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Renovate
Bot](https://redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC42Ny40IiwidXBkYXRlZEluVmVyIjoiMzguNjcuNCIsInRhcmdldEJyYW5jaCI6Im1hc3RlciIsImxhYmVscyI6WyJhdXRvbWVyZ2UiLCJ1cGRhdGUvZG9ja2VyL2dlbmVyYWwvbm9uLW1ham9yIl19-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Ability to add image when creating item
4 participants