Revert some changes

This commit is contained in:
Eugene Burmakin 2025-11-19 21:40:43 +01:00
parent 491767b114
commit c99f6597f0
18 changed files with 10 additions and 105 deletions

View file

@ -1,11 +1,10 @@
import L from "leaflet"; import L from "leaflet";
import "leaflet.heat"; import "leaflet.heat";
import { createAllMapLayers } from "../maps/layers"; import { createAllMapLayers } from "../maps/layers";
import { PlacesManager } from "../maps/places";
import BaseController from "./base_controller"; import BaseController from "./base_controller";
export default class extends BaseController { export default class extends BaseController {
static targets = ["map", "loading", "heatmapBtn", "pointsBtn", "placesBtn"]; static targets = ["map", "loading", "heatmapBtn", "pointsBtn"];
connect() { connect() {
super.connect(); super.connect();
@ -65,10 +64,6 @@ export default class extends BaseController {
this.markersLayer = L.layerGroup(); // Don't add to map initially this.markersLayer = L.layerGroup(); // Don't add to map initially
this.heatmapLayer = null; this.heatmapLayer = null;
// Initialize Places Manager
this.placesManager = new PlacesManager(this.map, this.apiKey);
this.placesManager.initialize();
// Load data for this month // Load data for this month
this.loadMonthData(); this.loadMonthData();
@ -233,40 +228,6 @@ export default class extends BaseController {
} }
} }
togglePlaces() {
if (!this.placesManager) {
console.warn("Places manager not initialized");
return;
}
if (this.map.hasLayer(this.placesManager.placesLayer)) {
// Remove places layer
this.map.removeLayer(this.placesManager.placesLayer);
if (this.hasPlacesBtnTarget) {
this.placesBtnTarget.classList.remove('btn-active');
}
} else {
// Add places layer
this.map.addLayer(this.placesManager.placesLayer);
if (this.hasPlacesBtnTarget) {
this.placesBtnTarget.classList.add('btn-active');
}
}
}
filterPlacesByTags(event) {
if (!this.placesManager) return;
// Collect all checked tag IDs
const checkboxes = event.currentTarget.closest('[data-controller="stat-page"]').querySelectorAll('input[type="checkbox"][data-tag-id]');
const selectedTagIds = Array.from(checkboxes)
.filter(cb => cb.checked)
.map(cb => parseInt(cb.dataset.tagId));
// Filter places by selected tags (or show all if none selected)
this.placesManager.filterByTags(selectedTagIds.length > 0 ? selectedTagIds : null);
}
showLoading(show) { showLoading(show) {
if (this.hasLoadingTarget) { if (this.hasLoadingTarget) {
this.loadingTarget.style.display = show ? 'flex' : 'none'; this.loadingTarget.style.display = show ? 'flex' : 'none';

View file

@ -91,7 +91,7 @@ class Users::ImportData::Places
logger.debug "No exact match found for #{name} at (#{latitude}, #{longitude}). Creating new place." logger.debug "No exact match found for #{name} at (#{latitude}, #{longitude}). Creating new place."
place_attributes = place_data.except('created_at', 'updated_at', 'latitude', 'longitude') place_attributes = place_data.except('created_at', 'updated_at', 'latitude', 'longitude')
# lonlat will be auto-generated by the Place model's before_validation callback place_attributes['lonlat'] = "POINT(#{longitude} #{latitude})"
place_attributes['latitude'] = latitude place_attributes['latitude'] = latitude
place_attributes['longitude'] = longitude place_attributes['longitude'] = longitude
place_attributes['user_id'] = user.id place_attributes['user_id'] = user.id

View file

@ -70,9 +70,6 @@
<button class="btn btn-sm btn-outline" data-stat-page-target="pointsBtn" data-action="click->stat-page#togglePoints"> <button class="btn btn-sm btn-outline" data-stat-page-target="pointsBtn" data-action="click->stat-page#togglePoints">
<%= icon 'map-pin' %> Points <%= icon 'map-pin' %> Points
</button> </button>
<button class="btn btn-sm btn-outline" data-stat-page-target="placesBtn" data-action="click->stat-page#togglePlaces">
<%= icon 'map-pin-plus' %> Places
</button>
</div> </div>
</div> </div>
@ -86,33 +83,6 @@
</div> </div>
</div> </div>
<!-- Tag Filters -->
<% if current_user.tags.any? %>
<div class="mt-4 p-4 bg-base-200 rounded-lg">
<h3 class="font-semibold mb-3 flex items-center gap-2">
<%= icon 'filter' %> Filter Places by Tags
</h3>
<div class="flex flex-wrap gap-3">
<% current_user.tags.ordered.each do |tag| %>
<label class="flex items-center gap-2 cursor-pointer hover:bg-base-300 px-3 py-2 rounded-lg transition-colors">
<input type="checkbox"
data-tag-id="<%= tag.id %>"
data-action="change->stat-page#filterPlacesByTags"
class="checkbox checkbox-sm checkbox-primary">
<span class="text-xl"><%= tag.icon %></span>
<span class="text-sm font-medium">#<%= tag.name %></span>
<% if tag.color.present? %>
<span class="w-3 h-3 rounded-full ml-1" style="background-color: <%= tag.color %>;"></span>
<% end %>
</label>
<% end %>
</div>
<div class="mt-2 text-sm text-base-content/70">
<%= icon 'info' %> Select tags to filter places on the map. Uncheck all to show all places.
</div>
</div>
<% end %>
<!-- Map Stats --> <!-- Map Stats -->
<!--div class="stats grid grid-cols-2 md:grid-cols-4 gap-4 mt-4"> <!--div class="stats grid grid-cols-2 md:grid-cols-4 gap-4 mt-4">
<div class="stat"> <div class="stat">
@ -348,6 +318,3 @@
<!-- Include Sharing Modal --> <!-- Include Sharing Modal -->
<%= render 'shared/sharing_modal' %> <%= render 'shared/sharing_modal' %>
<!-- Include Place Creation Modal -->
<%= render 'shared/place_creation_modal' %>

View file

@ -8,6 +8,9 @@ RSpec.describe Tag, type: :model do
it { is_expected.to have_many(:places).through(:taggings) } it { is_expected.to have_many(:places).through(:taggings) }
it { is_expected.to validate_presence_of(:name) } it { is_expected.to validate_presence_of(:name) }
it { is_expected.to validate_length_of(:icon).is_at_most(10) }
it { is_expected.to allow_value(nil).for(:icon) }
it { is_expected.to validate_numericality_of(:privacy_radius_meters).is_greater_than(0).is_less_than_or_equal_to(5000).allow_nil }
describe 'validations' do describe 'validations' do
subject { create(:tag) } subject { create(:tag) }

View file

@ -5,8 +5,6 @@ require 'rails_helper'
RSpec.describe 'Api::V1::Maps::Hexagons', type: :request do RSpec.describe 'Api::V1::Maps::Hexagons', type: :request do
let(:user) { create(:user) } let(:user) { create(:user) }
describe 'GET /api/v1/maps/hexagons' do describe 'GET /api/v1/maps/hexagons' do
let(:valid_params) do let(:valid_params) do
{ {

View file

@ -8,8 +8,6 @@ RSpec.describe 'Family::Invitations', type: :request do
let!(:membership) { create(:family_membership, user: user, family: family, role: :owner) } let!(:membership) { create(:family_membership, user: user, family: family, role: :owner) }
let(:invitation) { create(:family_invitation, family: family, invited_by: user) } let(:invitation) { create(:family_invitation, family: family, invited_by: user) }
describe 'GET /family/invitations' do describe 'GET /family/invitations' do
before { sign_in user } before { sign_in user }

View file

@ -7,8 +7,6 @@ RSpec.describe 'Family Workflows', type: :request do
let(:user2) { create(:user, email: 'bob@example.com') } let(:user2) { create(:user, email: 'bob@example.com') }
let(:user3) { create(:user, email: 'charlie@example.com') } let(:user3) { create(:user, email: 'charlie@example.com') }
describe 'Complete family creation and management workflow' do describe 'Complete family creation and management workflow' do
it 'allows creating a family, inviting members, and managing the family' do it 'allows creating a family, inviting members, and managing the family' do
# Step 1: User1 creates a family # Step 1: User1 creates a family

View file

@ -3,8 +3,6 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe 'Imports', type: :request do RSpec.describe 'Imports', type: :request do
describe 'GET /imports' do describe 'GET /imports' do
context 'when user is logged in' do context 'when user is logged in' do
let(:user) { create(:user) } let(:user) { create(:user) }

View file

@ -3,8 +3,6 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe 'Map', type: :request do RSpec.describe 'Map', type: :request do
describe 'GET /index' do describe 'GET /index' do
context 'when user signed in' do context 'when user signed in' do
let(:user) { create(:user) } let(:user) { create(:user) }

View file

@ -3,8 +3,6 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe '/notifications', type: :request do RSpec.describe '/notifications', type: :request do
context 'when user is not logged in' do context 'when user is not logged in' do
it 'redirects to the login page' do it 'redirects to the login page' do
get notifications_url get notifications_url

View file

@ -3,8 +3,6 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe '/settings/background_jobs', type: :request do RSpec.describe '/settings/background_jobs', type: :request do
context 'when Dawarich is in self-hosted mode' do context 'when Dawarich is in self-hosted mode' do
before do before do
allow(DawarichSettings).to receive(:self_hosted?).and_return(true) allow(DawarichSettings).to receive(:self_hosted?).and_return(true)

View file

@ -3,8 +3,6 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe 'settings/maps', type: :request do RSpec.describe 'settings/maps', type: :request do
context 'when user is authenticated' do context 'when user is authenticated' do
let!(:user) { create(:user) } let!(:user) { create(:user) }

View file

@ -3,8 +3,6 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe '/stats', type: :request do RSpec.describe '/stats', type: :request do
context 'when user is not signed in' do context 'when user is not signed in' do
describe 'GET /index' do describe 'GET /index' do
it 'redirects to the sign in page' do it 'redirects to the sign in page' do

View file

@ -10,8 +10,6 @@ RSpec.describe 'Users::Registrations', type: :request do
create(:family_invitation, family: family, invited_by: family_owner, email: 'invited@example.com') create(:family_invitation, family: family, invited_by: family_owner, email: 'invited@example.com')
end end
describe 'Family Invitation Registration Flow' do describe 'Family Invitation Registration Flow' do
context 'when accessing registration with a valid invitation token' do context 'when accessing registration with a valid invitation token' do
it 'shows family-focused registration page' do it 'shows family-focused registration page' do

View file

@ -3,8 +3,6 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe 'Users', type: :request do RSpec.describe 'Users', type: :request do
describe 'GET /users/sign_up' do describe 'GET /users/sign_up' do
context 'when self-hosted' do context 'when self-hosted' do
before do before do

View file

@ -11,6 +11,7 @@ RSpec.describe Api::PlaceSerializer do
name: 'Central Park', name: 'Central Park',
longitude: -73.9665, longitude: -73.9665,
latitude: 40.7812, latitude: 40.7812,
lonlat: 'SRID=4326;POINT(-73.9665 40.7812)',
city: 'New York', city: 'New York',
country: 'United States', country: 'United States',
source: 'photon', source: 'photon',

View file

@ -591,7 +591,7 @@ RSpec.describe ReverseGeocoding::Places::FetchData do
end end
context 'when lonlat is already present on existing place' do context 'when lonlat is already present on existing place' do
let!(:existing_place) { create(:place, :with_geodata, latitude: 50.0, longitude: 10.0) } let!(:existing_place) { create(:place, :with_geodata, lonlat: 'POINT(10.0 50.0)') }
let(:existing_data) do let(:existing_data) do
double( double(
data: { data: {
@ -600,9 +600,7 @@ RSpec.describe ReverseGeocoding::Places::FetchData do
'osm_id' => existing_place.geodata.dig('properties', 'osm_id'), 'osm_id' => existing_place.geodata.dig('properties', 'osm_id'),
'name' => 'Updated Name' 'name' => 'Updated Name'
} }
}, }
latitude: 55.0,
longitude: 15.0
) )
end end
@ -614,10 +612,7 @@ RSpec.describe ReverseGeocoding::Places::FetchData do
service.call service.call
existing_place.reload existing_place.reload
# lonlat is auto-generated from latitude/longitude, so it should remain based on original coordinates
expect(existing_place.lonlat.to_s).to eq('POINT (10.0 50.0)') expect(existing_place.lonlat.to_s).to eq('POINT (10.0 50.0)')
expect(existing_place.latitude).to eq(50.0)
expect(existing_place.longitude).to eq(10.0)
end end
end end
end end

View file

@ -25,7 +25,7 @@ RSpec.describe Visits::Creator do
end end
context 'when a confirmed visit already exists at the same location' do context 'when a confirmed visit already exists at the same location' do
let(:place) { create(:place, user: user, latitude: 40.7128, longitude: -74.0060, name: 'Existing Place') } let(:place) { create(:place, lonlat: 'POINT(-74.0060 40.7128)', name: 'Existing Place') }
let!(:existing_visit) do let!(:existing_visit) do
create( create(
:visit, :visit,
@ -61,7 +61,7 @@ RSpec.describe Visits::Creator do
end end
context 'when a confirmed visit exists but at a different location' do context 'when a confirmed visit exists but at a different location' do
let(:different_place) { create(:place, user: user, latitude: 41.0000, longitude: -73.9000, name: 'Different Place') } let(:different_place) { create(:place, lonlat: 'POINT(-73.9000 41.0000)', name: 'Different Place') }
let!(:existing_visit) do let!(:existing_visit) do
create( create(
:visit, :visit,